Views
User manual/AllInOnePage
From MCRL2
Introduction
mCRL2 stands for micro Common Representation Language 2. It is a specification language that can be used to specify and analyse the behaviour of distributed systems and protocols and is the successor to μCRL. Using its accompanying toolset systems can be analysed and verified automatically.
Philosophy
mCRL2 is based on the Algebra of Communicating Processes (ACP) which is extended to include data and time. Like in every process algebra, a fundamental concept in mCRL2 is the process. Processes can perform actions and can be composed to form new processes using algebraic operators. A system usually consists of several processes (or components) in parallel.
A process can carry data as its parameters. The state of a process is a specific combination of parameter values. This state may influence the possible actions that the process can perform. In turn, the execution of an action may result in a state change. Every process has a corresponding state space or Labelled Transition System (LTS) which contains all states that the process can reach, along with the possible transitions between those states.
Using the algebraic operators, very complex processes can be constructed containing, for example, lots of parallelism. A central notion in mCRL2 is the linear process. This is a process from which all parallelism has been removed to produce a series of condition - action - effect rules. Complex systems, consisting of hundreds or even thousands of processes, can be translated to a single linear process. Even for systems with an infinite state space, the linear process (being an abstract representation of that state space) is finite and can often be obtained very easily. Therefore, most tools in the mCRL2 toolset operate on linear processes rather than on state spaces.
Model checking is provided using Parameterised Boolean Equation Systems (PBES). Given a linear process and a formula that expresses some desired behaviour of the process, a PBES can be generated. The solution to this PBES indicates whether the formula holds on the process or not. An attempt can be made to remove data from a PBES in order to obtain a BES, which is often easier to solve.
History
Around 1980 many process algebras were designed to model behaviour. Most notably were CCS (Calculus of Communicating Processes, Milner), ACP (Algebra of Communicating Processes, Bergstra and Klop) and CSP (Communicating Sequential Processes, Hoare). These process algebras were mainly used as an object of study, mainly due to their lack of proper data types.
In order to use these languages for actual modelling of behaviour a number of process algebraic specifiation languages have been designed, which invariably were extended with equational datatypes. The most well known is LOTOS (Language of Temporal Ordering Specifications , Brinksma), but others are PSF (Process Specification Formalism, Mauw and Veltink) and μCRL (micro Common Representation Language, Groote and Ponse).
Unfortunately, the use of abstract data types made these languages unpleasant when it came to the specification of complex behaviour. Therefore, we designed the language mCRL2 (the successor of μCRL) to contain exactly those data types that one would expect when writing specifications, namely Bool, Pos, Nat, Int, Real, lists, sets, bags, functions and functional data types. These data types are machine independent. For instance there is no upperbound on natural numbers, sets are not necessarily finite, quantification can be used within boolean terms and lambda abstraction is part of the language. Furthermore, the language features time and multi-actions, which were not present in most of the process specification languages of the previous generation.
Note that mCRL2 is extremely rich and it is easy to express non-computable behavioural specifications in it. Typically, for those specifications, tool supported analysis will not be very fruitful. The advanced use of mCRL2 requires a good understanding of the language, the underlying notions and even of the implementation of the analysis tools. For more straightforward use this is not needed. An effective rule of thumb is that everything that could be done using languages such as LOTOS, PSF and μCRL, can be done without a problem using mCRL2.
Overview of this document
This user manual contains the following sections:
- The Installation instructions describe how to install the mCRL2 toolset;
- The Toolset overview gives an overview of the available tools.
- The Tool manual pages contain reference manuals for all mCRL2 tools.
- The FAQ provides answers to frequently asked questions.
Installation instructions
Supported platforms for binary distributions
Currently the binary distributions are supported by following platforms:
Windows
- Microsoft Windows XP (Version number: NT 5.1.2600)
- Microsoft Windows Vista (Version number: NT 6.0.6000)
- Microsoft Windows 7 (Version number: NT 6.1)
Note: Other Microsoft Windows platforms may work, but have not been (thoroughly) tested.
Mac OS X
- Mac OS X (Darwin)
Linux
- Fedora 12 (64-bit)
- OpenSUSE 11.3 (64-bit)
- Ubuntu 10.4 Lucid Lynx (32-bit and 64-bit)
Installing a binary distribution
Unix/Linux
Binary distributions for some linux versions are available. See the Download page for more details.
For (manually) installing the mCRL2 toolset under other Unix/Linux variants, please follow the CMake build instructions.
Mac OS X
A binary distribution for Darwin is available. See the Download page for details.
For manually installing the mCRL2 toolset under Mac OS X, please follow the CMake build instructions.
Windows
These instructions are for installing the toolset on Windows.
- If a previous version of the toolset is installed, make sure to uninstall the toolset via "Add or Remove Programs" in the "Control Panel"
- Obtain a binary distribution from the download page.
- Install the toolset with the windows installer. The toolset will be installed to the chosen path.
- The tools can be found in the installation directory of your choice.
- NOTE: The toolset contains a number of command line tools. For effective use of these tools we advise you to add the installation directory to your PATH environment variable. This can be achieved by making the appropriate choice in the installer.
Installing a source distribution
To install a source distribution please follow the CMake build instructions.
Toolset overview
Introduction
An overview of the mCRL2 toolset is given in the picture below. It shows the main concepts that play a role (in blue) and the operations that can be performed on these concepts (in red). In the toolset, a file format is associated with every concept and operations are implemented in tools. In order to get a feeling for the relevant concepts and tools, we describe the workflow of a typical analysis using mCRL2 below.
All tools can be accessed via a command-line interface. Another possibility is to use the mcrl2-gui tool which provides access to the tools via a GUI.
mCRL2 specification and linearisation
Every analysis starts off by specifying the behaviour of the system being studied. This can be any kind of system, though the main application of mCRL2 is in distributed software systems. The specification can be seen as a model of the real system: it is a simplified, or abstracted version of reality. Obtaining a specification that is faithful to the real system is far from trivial and beyond the scope of this overview.
An mCRL2 specification is a plain-text file containing a model in the mCRL2 language. It can be created using any text editor. For a description of the mCRL2 language we refer to the Language reference.
Typically, the specification of a distributed system contains several processes that run in parallel. The first step in the mCRL2 analysis process is to linearise this specification to obtain a Linear Process Specification (LPS). This is an mCRL2 specification from which all parallelism has been removed. All that remains is a series of condition -- action -- effect rules that specify how the system as a whole reacts to certain stimuli given its current state. Because of its much simpler form, the LPS is much more suitable for automated analysis than an mCRL2 specification. Therefore, most tools in the mCRL2 toolset operate on LPSs.
The main tool for linearisation is mcrl22lps. Given an mCRL2 specification, it produces an equivalent LPS on which other tools can be run. We investigate these tools below.
LPS tools
An LPS is stored in a binary file format for efficiency. After having obtained an LPS, a very useful analysis method is by simulating the model. Starting from the initial state, sequences of actions can be performed which can quickly reveal unexpected or erroneous behaviour. It is also a good way of getting acquainted with the modelled behaviour.
The mCRL2 toolset contains two tools for simulation of an LPS: sim (command-line interface) and xsim (graphical user interface).
Some statistical information about an LPS can be collected using the lpsinfo tool. The LPS itself can also be printed in a pretty, human-readable format. The tool for this task is lpspp.
In essence, the LPS is a symbolic (or implicit) representation of the state space or labelled transition system (LTS) that describes the behaviour of the system explicitly. This LTS can be constructed from the LPS using a state space generator. In mCRL2 the tool that performs this task is lps2lts.
As state space generation can take a lot of time, it is often beneficial to reduce the LPS or make it more suitable for state space generation. Several tools are available for this, of which we mention a few here: lpssumelm, lpssuminst, lpsparelm, lpsconstelm and lpsrewr. Please refer to the manual pages of these tools for more information.
LTS tools
Once an LTS has been generated from an LPS, it can be visualised in several ways using interactive GUI tools. The most straightforward way of visualising an LTS is by showing it as a node-link diagram or graph. The ltsgraph tool performs this task. It can reorganise the produced image using a force-directed algorithm.
The picture produced by ltsgraph can become very cluttered for larger LTSs. Another LTS visualisation tool is ltsview which employs a clustering technique to reduce the complexity of the image. It produces a 3D visualisation of the LTS and aims to show symmetry in the behaviour of the system.
Diagraphica also clusters states to reduce complexity, producing a 2D image. It clusters states based on state parameter values, instead of on structural properties like ltsview.
Apart from these visualisation tools, a powerful tool is ltsconvert which can reduce an LTS modulo various equivalences. This often produces an LTS that is dramatically smaller than the original LTS, while important properties are maintained. The tool can also convert between various LTS file formats, some of which are textual, others binary.
An equally powerful tool is ltscompare which can check whether two LTSs are behaviourally equivalent or similar using various notions of equivalence/similarity.
The tool lts2lps can transform an LTS into an LPS, such that symbolic computation can be continued, e.g. after minimisation.
Model checking using PBESs
The aforementioned tools aid in getting more insight into the behaviour specified by an mCRL2 specification. However, a system's analysis often involves showing that the modelled system exhibits certain desired properties (or does not exhibit undesired ones). This can be done using model-checking techniques, which are very powerful verification methods.
In mCRL2, model checking is provided using parameterised boolean equation systems (PBESs). As mentioned before, the central notion in mCRL2 is the LPS. Not surprisingly, model checking also starts off with an LPS, which contains a symbolic specification of the system's behaviour.
The other input needed for model checking, is a formula expressing a desired property that the system should not violate (or satisfy). Such formulas are expressed in the regular modal μ-calculus (extended with data) and can be entered into a plain-text file using any text editor. The syntax of these formulas is described in the Language reference.
Given an LPS and a formula, the tool lps2pbes produces a PBES in which the model checking question of "does the formula hold for this LPS?" is encoded. The PBES is stored in a binary file format. By solving the PBES, an answer to this question can be found. The main tool for trying to solve a PBES is pbes2bool. It attempts to solve a given PBES and (if successful) returns either true or false.
Note that solving PBESs is generally undecidable, so the attempt may fail. In this case, more in-depth analysis of the PBES may be required. The tool pbespp is provided to pretty print a PBES in a human-readable format. Statistical information can be obtained using pbesinfo and the PBES can be simplified using pbesrewr. Furthermore some tools for simplifying the PBES are available, such as pbesparelm and pbesconstelm.
Import and export
The mCRL2 toolset also provides tools for converting system specifications in other languages to mCRL2. This can be done for Chi-models using chi2mcrl2, for Petri nets using pnml2mcrl2 and for typed LySa using lysa2mcrl2. Furthermore a μCRL linear process can be converted to an mCRL2 LPS using tbf2lps. Finally, an interface with the TorX tool is provided by lps2torx.
Tool manual pages
Release tools
| Integrated tool environment | |
|---|---|
| mcrl2-gui | A graphical front-end for mCRL2-tools. |
| mCRL2 tools | |
| grapemcrl2 | Graphical editing environment for mCRL2 process specifications. |
| mcrl2i | Interpreter for the mCRL2 data language. |
| LPS tools | |
| formulacheck | Check a boolean formula. |
| lps2lts | Generate an LTS from an LPS. |
| lpsactionrename | Rename actions of an LPS. |
| lpsbinary | Replace finite sort variables by vectors of boolean variables in an LPS. |
| lpsconfcheck | Mark confluent tau-summands of an LPS. |
| lpsconstelm | Remove constant parameters from an LPS. |
| lpsinfo | Display basic information about an LPS. |
| lpsinvelm | Check invariants and use these to simplify or eliminate summands of an LPS. |
| lpsparelm | Remove unused parameters from an LPS. |
| lpsparunfold | Unfold process parameters in an LPS. |
| lpspp | Pretty print an LPS. |
| lpsrewr | Rewrite data expressions in an LPS. |
| lpssim | Command-line simulation of an LPS. |
| lpssumelm | Remove superfluous summations from an LPS. |
| lpssuminst | Instantiate summation variables of an LPS. |
| lpsuntime | Remove time from an LPS. |
| lpsxsim | Graphical simulation of an LPS. |
| mcrl22lps | Translate an mCRL2 specification to an LPS. |
| txt2lps | Parse a textual description of a linear process specification. |
| PBES tools | |
| lps2pbes | Generate a PBES from an LPS and a state formula. |
| pbes2bool | Solve a (P)BES. |
| pbes2bes | Instantiate a PBES into a BES. |
| pbesconstelm | Remove constant parameters from a PBES. |
| pbesinfo | Display basic information about a PBES. |
| pbesparelm | Remove unused parameters from a PBES. |
| pbespgsolve | Solve a (P)BES using a parity game solver. |
| pbespp | Pretty print a PBES. |
| pbesrewr | Rewrite and simplify a PBES. |
| txt2pbes | Parse a textual description of a PBES. |
| BES tools | |
| besinfo | Provide information of a BES. |
| bespp | Pretty print a BES. |
| pbes2bool | Solve a (P)BES. |
| pbespgsolve | Solve a (P)BES using a parity game solver. |
| LTS tools | |
| diagraphica | Interactive visual analysis of an LTS. |
| lts2lps | Convert an LTS to an LPS. |
| ltscompare | Compare two LTSs. |
| ltsconvert | Convert and optionally minimise an LTS. |
| ltsgraph | Visualise an LTS as a graph and manipulate its layout. |
| ltsinfo | Display basic information about an LTS. |
| ltsview | 3D interactive visualisation of an LTS. |
| tracepp | Convert and pretty print traces. |
| Import/Export | |
| chi2mcrl2 | Convert a Chi specification to a matching mCRL2 process specification. |
| lps2torx | Provide TorX explorer interface to an LPS. |
| lysa2mcrl2 | Convert a Typed LySa specification to an mCRL2 process specification. |
| pnml2mcrl2 | Convert a Petri net to an mCRL2 process specification (removed from release March 2011). |
| tbf2lps | Convert a µCRL LPE to an mCRL2 LPS. |
Experimental tools
| besconvert | Simplify a BES using equivalences. |
| bessolve | Solve a BES. |
| lpsbisim2pbes | Compute a bisimulation relation between two LPSs. |
| lpsrealelm | Remove Real numbers from an LPS. |
| lts2pbes | Generate a PBES from an LTS and a state formula. |
| pbesabsinthe | A form of abstract interpretation for PBESs. |
| pbesabstract | A form of abstract interpretation for PBESs. |
| pbesinst | Compute a (P)BES out of a PBES. |
| pbespareqelm | Compute equivalence relations on parameters of a PBES. |
| txt2bes | Parse a textual description of a BES. |
Deprecated tools
| squadt | Interactive integration of software tools, including the tools mentioned above. |
| ltsmin | Minimise an LTS. |
chi2mcrl2
Convert a Chi specification to a matching mCRL2 process specification.
Synopsis
chi2mcrl2 [OPTION]... [INFILE [OUTFILE]]
Short description
chi2mcrl2 translates a Chi specification to a matching mCRL2 specification. For all the supported Chi operators individual translations to mCRL2 summands (with their associated data parameters) are constructed.
Currently, only non-timed/non-hybrid Chi specifications can be translated. If a specification is timed, e.g. the Chi statement delay, the time progress is translated to a "skip". If hybrid statements are used, e.g. the Chi Statement cont , the translation will fail to translate.
Options
OPTION can be any of the following:
- -n, --no-state
- no state parameters are generated when translating Chi processes
Standard options:
- -q, --quiet
- do not display warnings
- -v, --verbose
- display concise intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help message
- --version
- display version information
Detailed description
Supported Language Features
Like mCRL2, Chi also has a variety of tools for different translation and simulation purposes. Due to this variety it is hard to keep track of all the supported language features. We give an overview of the supported language features by chi2mcrl2, similar to the Chi Tools page. Note that the presented link shows a "Chi to μCRL translation", which is the predecessor of mCRL2.
In the tables below, a “+” means that the feature is supported and a “-” means that the language is not supported.
Variable Classes
Each variable in a Chi program belongs to a variable class. Below are the supported variable classes for chi2mcrl2.
| Variable Class | chi2mcrl2 |
|---|---|
| cont vardecl | - |
| alg vardecl | - |
| var vardecl | + |
| alg parameter | - |
| alg parameter | - |
with the following footnotes:
- vardecl means “variable declaration”
- parameter means “parameter declarations” (in headers of models, processes)
Constant definitions
Constant definitions are not supported by chi2mcrl2.
Imports
Imports are a general concept in Chi. Library files can be imported but also other Chi specifications or even libraries written in other languages are considered useful. However the import feature is not supported in chi2mcrl2.
Enumerations
Enumeration definitions are not supported by chi2mcrl2.
Functions
Enumeration definitions are not supported by chi2mcrl2.
Processes
The following language features are supported.
| Feature | chi2mcrl2 |
|---|---|
| time in guards | - |
| folding | - |
| alternative composition | + |
| parallel composition | #1 |
| process instantiation | #1 |
| recdef instantiation | - |
| deadlock | + |
| inconsistent | - |
| delay predicate | - |
| action predicate | #2 |
| any delay | - |
| signal emission | - |
| delay operator | #3 |
| jump enable | - |
| local variable scope | - |
| local channel scope | - |
| local recdef scope | - |
| recdef | - |
| urgent communication | - |
| encapsulation | - |
| guard | + |
with the following footnotes:
- recdef means “recursion definition” in the above table.
- #1: parallel composition is allowed only in a model definition
- #2: instead skips and multi-assignments are translated
- #3: delay is translated to a silent action
Data types
In the table below are the supported data types for chi2mcrl2.
| Data type | chi2mcrl2 |
|---|---|
| booleans | + |
| naturals | + |
| reals | - |
| lists | + |
| sets | + |
| dictionaries | - |
| vectors | - |
| records | + |
| distributions | - |
| matrices | - |
Author
Written by Frank Stappers.
Reporting bugs
Report bugs at our issue tracking system.
diagraphica
Interactive visual analysis of an LTS.
Synopsis
diagraphica [OPTION]... [INFILE]
Short description
The diagraphica tool offers multivariate state visualization and simulation analysis techniques for labelled transition systems (LTS's) in the FSM format. If INFILE is present, it will be loaded by the tool.
In the analysis mode, the tool allows the user to cluster states based on selected attributes. The clusters are visualized in a hierarchical pyramid structure were transitions between clusters are shown by arcs. The simulation view gives the user the facility to navigate through the transition graph and shows the effect of actions on the configuration. The integrated edit mode allows the user to create such a configuration. A configuration consists of geometric shapes. Each of the different shapes have a number of geometric and non-geometric degree of freedoms that can be adjusted for simulation purposes.
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
A more elaborate description can be found here and in <ref> Bridging the semantic gap: visualization of transition graphs with user-defined diagrams A.J. Pretorius and J.J. van Wijk IEEE Computer Graphics and Applications, vol. 27, no. 5, pp. 58-66, 2007. </ref>.
References
<references />
Author
Written by Hannes Pretorius.
Bug reporting
Report bugs at our issue tracking system.
formulacheck
Check a boolean formula.
Synopsis
formulacheck [OPTION]... [INFILE]
Short description
The formulacheck tool checks the boolean formula (an mCRL2 data expression of sort Bool) in INFILE. If INFILE is not present, stdin is used.
The tool indicates whether or not the formula is a tautology or a contradiction.
In some cases, the tool is unable to determine whether a formula is a tautology or a contradiction. The option --verbose gives insight into what the prover used by the tool is doing and can be used to see if rewrite rules have to be added to the specification in order to enable the prover to determine that certain formulas are indeed tautologies or contradictions.
A BDD based prover is used to the check the formula. In some cases it may be useful to use an SMT solver to assist the prover. The SMT solver can further reduce BDDs by removing inconsistent paths. A specific SMT solver can be chosen using the option --smt-solver=SOLVER. Either the SMT solver Ario or CVC3 can be used. To use one of these solvers, the directory containing the corresponding executable must be in the path.
Example of use
The input file typically contains a single expression such as
3+3<4
When formulacheck would be applied to this file it would respond with
'3 + 3 < 4': Contradiction
If the input formula holds, the following output would be
'#[4, 5, 6] > 2': Tautology
If the input contains an expression which cannot be rewritten to true or false the response is
'[1, 4, 7]': Undeterminable
It is not possible to use formulacheck for open terms. For this the interactive tool mcrl2i is more convenient.
Options
OPTION can be any of the following:
- -c, --counter-example
- display a valuation for which the formula does not hold, in case the current formula is neither a contradiction nor a tautology
- -o, --induction
- apply induction on lists
- -pPREFIX, --print-dot=PREFIX
- save a .dot file of the resulting BDD if it is impossible to determine whether a formula is a contradiction or a tautology; PREFIX will be used as prefix of the output files
- -rNAME, --rewrite-strategy=NAME
- use rewrite strategy NAME
- -sSPECFILE, --spec=SPECFILE
- check the formula against the data types from the LPS or PBES in SPECFILE
- -tLIMIT, --time-limit=LIMIT
- spend at most LIMIT seconds on proving the formula
- -w, --witness
- display a valuation for which the formula holds, in case the current formula is neither a contradiction nor a tautology
- -zSOLVER, --smt-solver=SOLVER
- use SOLVER to remove inconsistent paths from the internally used BDDs:
- 'ario': the SMT solver Ario
- 'cvc': the SMT solver CVC3
- by default, no path elimination is applied
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Luc Engelen.
Bug reporting
Report bugs at our issue tracking system.
grapemcrl2
Graphical editing environment for mCRL2 process specifications.
Synopsis
grapemcrl2 [OPTION]... [INFILE]
Short description
The grapemcrl2 tool allows users to create mCRL2 process specifications by means of a graphical editing environment. If INFILE is present, the corresponding file is loaded as a GraPE specification.
Detailed help is provided in the online manual, accessible from within the tool.
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Remco Blewanus, Thorstin Crijns, Diana Koenraadt, Bas Luksenburg, Jonathan Nelisse, Hans Poppelaars and Bram Schoenmakers.
Bug reporting
Report bugs at our issue tracking system.
lps2lts
Generate an LTS from an LPS.
Synopsis
lps2lts [OPTION]... [INFILE [OUTFILE]]
Short description
The lps2lts tool generates a labelled transition system (LTS) from the linear process specification (LPS) in INFILE and saves the result to OUTFILE. If OUTFILE is not supplied, the LTS is not stored. If INFILE is not supplied, stdin is used.
The format of OUTFILE is determined by its extension (unless it is specified by an option). The supported formats are:
- aut: for the Aldebaran format (CADP)
- bcg: for the Binary Coded Graph format (CADP) (if BCG support is enabled)
- dot: for the GraphViz format
- fsm: for the Finite State Machine format
- mcrl: for the mCRL SVC format
- mcrl2: for the mCRL2 format (default)
- svc: for the (generic) SVC format
If the jittyc rewriter is used, then the MCRL2_COMPILEREWRITER environment variable (default value: mcrl2compilerewriter) determines the script that compiles the rewriter, and MCRL2_COMPILEDIR (default value: '.') determines where temporary files are stored.
Note that lps2lts can deliver multiple transitions with the same label between any pair of states. If this is not desired, such transitions can be removed by applying a strong bisimulation reducton using for instance the tool ltsconvert.
Options
OPTION can be any of the following:
- -aNAMES, --action=NAMES
- Detect and report actions in the transition system that have action names from the list NAMES. This is for instance useful to find (or prove the absence) of an action error. The list NAMES is a comma separated list of action names. A message is printed for every occurrence of an action with action names in the list. With the -t flag traces towards these actions are generated.
- -b[NUM], --bit-hash[=NUM]
- Make use of bit hashing to store states and store at most NUM states. This means that instead of keeping a full record of all states that have been visited, a bit array is used that indicate whether or not a hash of a state has been seen before. Although this means that this option may cause states to be mistaken for others (because they are mapped to the same hash), it can be useful to explore very large LTSs that are otherwise not explorable. If NUM is not supplied, then approximately 200 million is taken (this corresponds to about 25MB of memory).
- -c[NAME], --confluence[=NAME]
- Apply on-the-fly confluence reduction where action NAME is considered to denote a confluent silent step. If NAME is not supplied, ctau is assumed to be the confluent silent step.
- -D, --deadlock
- Detect deadlocks (i.e. for every deadlock a message is printed). A deadlock is a state from which no transitions are possible.
- -F, --divergence
- Detect divergences. For every state with a divergence (=tau loop) a message is printed. The algorithm to detect the divergences is linear for every state, and so state space exploration becomes quadratic with this option on. State space exploration can become slow with this option.
- --error-trace
- If an error occurs during exploration, a trace to the state that could not be explored is saved to a trace file.
- -fNAME, --state-format=NAME
- Store state internally in format NAME:
- vector: for a vector (fastest, default in older versions of the toolset)
- tree: for a tree (for memory efficiency, default in toolset versions from autumn 2011)
- --init_tsize=NUM
- Set the initial size of the internally used hash tables. The default size is 10000.
- -lNUM, --max=NUM
- Explore at most NUM states. After exploring of NUM states lps2lts will stop, having generated a partial LTS.
- --no-info
- Do not add state information to OUTFILE. Without this option lps2lts adds state vector to the LTS. This option causes this information to be discarded and states are only indicated by a sequence number. Explicit state information is useful for visualisation purposes, for instance, but can cause the OUTFILE to grow considerably. Note that this option is implicit when writing in the AUT format.
- -oFORMAT, --out=FORMAT
- Use FORMAT as the output format.
- -rNAME, --rewriter=NAME
- Use rewrite strategy NAME. lps2lts uses a term rewriting engine to manipulate data terms of the LPS. The choice of the rewriter can have influence on the performance.
- -sNAME, --strategy=NAME
- Explore the state space using strategy NAME:
- b, breadth
- breadth-first search (default)
- d, depth
- depth-first search
- r, random
- random simulation
- --suppress
- in verbose mode, do not print progress messages indicating the number of visited states and transitions. For large state spaces the number of progress messages can be quite horrendous. This feature helps to suppress those. Other verbose messages, such as the total number of states explored, just remain visible.
- -t[NUM], --trace[=NUM]
- Write a shortest trace to each state that is reached with an action from NAMES from option --action or is a deadlock detected with --deadlock to a file. No more than NUM traces will be written. If NUM is not supplied the number of traces is unbounded.
- For each trace that is to be written a unique file with extension .trc (trace) will be created containing a shortest trace from the initial state to the deadlock state. The traces can be pretty printed and converted to other formats using tracepp.
- --todo-max=NUM
- Keep at most NUM states in todo lists; this option is only relevant for breadth-first search with bithashing, where NUM is the maximum number of states per level, and for depth first, where NUM is the maximum depth.
- -u, --unused-data
- Do not remove unused parts of the data specification.
- -yBOOL, --dummy=BOOL
- Replace free variables in the LPS with dummy values based on the value of BOOL: yes (default) or no.
Standard options:
- -q, --quiet
- Do not display warning messages.
- -v, --verbose
- Display short intermediate messages. This includes detailed status of the generation process. Once a level (in terms of breadth-first search) is completed, a message stating this is printed. After exploration of every 1000 states the following information is printed: current level, states explored, transitions explored, states seen. A state is explored if all its outgoing transitions have been explored. A state is seen if (at least) one of the transitions leading to it has been explored.
- -d, --debug
- Display detailed intermediate messages.
- -h, --help
- Display help information.
- --version
- Display version information.
Author
Written by Muck van Weerdenburg.
Reporting bugs
Report bugs at our issue tracking system.
lps2pbes
Synopsis
lps2pbes[OPTION]... --formula=FILE [INFILE [OUTFILE]]
Short Description
Convert the state formula in FILE and the LPS in INFILE to a parameterised boolean equation system (PBES) and save it to OUTFILE. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
The concrete syntax of state formulas can be found at <http://www.mcrl2.org/mcrl 2/wiki/index.php/Language_reference/mu-calculus_syntax>.
Options
OPTION can be any of the following:
- -fFILE, --formula=FILE
- use the state formula from FILE
- -t, --timed
- use the timed version of the algorithm, even for untimed LPS's
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Tim Willemse.
Reporting bugs
Report bugs at [1].
lps2torx
Provide TorX explorer interface to an LPS.
Synopsis
lps2torx [OPTION]... INFILE
Short description
The lps2torx tool provides a TorX explorer interface to the linear process equation (LPS) in INFILE.
The LPS can be explored using TorX as described in the TorX documentation.
Options
OPTION can be any of the following:
- -fNAME, --state-format=NAME
- store state internally in format NAME:
- vector: for a vector (fastest, default)
- tree: for a tree (for memory efficiency)
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
- -u, --unused-data
- do not remove unused parts of the data specification
- -yBOOL, --dummy=BOOL
- replace free variables in the LPS with dummy values based on the value of BOOL: yes (default) or no
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
lpsactionrename
Rename actions of an LPS.
Synopsis
lpsactionrename [OPTION]... --file=RENAMEFILE [INFILE[OUTFILE]]
Short description
The lpsactionrename tool renames the actions that occur in the INFILE and saves the result to the OUTFILE. If no OUTFILE is specified stdout is used. If no INFILE is specified stdin is used. The rename rules are defined in the RENAMEFILE that is given as a mandatory argument.
Options
OPTION can be any of the following:
- -fRENAMEFILE, --renamefile=RENAMEFILE
- use the rename rules from RENAMEFILE; this argument is mandatory
- -m, --no-sumelim
- do not apply sum elimination to the final result
- -o, --no-rewrite
- do not rewrite data terms while renaming; useful when the rewrite system does not terminate
- -pPHASE, --end-phase=PHASE
- stop conversion and output the action rename specification after phase PHASE: 'pa' (parsing), 'tc' (type checking), or 'di' (data implementation)
- -P, --pretty
- return a pretty printed version of the output
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Detailed description
Structure of rename files
The format of the RENAMEFILE can contain sort cons map eqn act sections as in a mcrl2 file. This is followed by a rename section to define the rename rules. The sections sort cons map eqn act are meant for new declarations that will be added to the LPS and can be used in the rename rules. The new declarations are not allowed to contain any conflicts with the declarations of the LPS. The rename section can be preceded by a var section, where variables can be declared for the rename rules.
The rename rules have the format: rename condition -> action1 => action2; where condition is a boolean expression that has to hold to rename an occurrence of action1 into action2. The condition can be left out, in which case all occurrences of action1 will be renamed. The actions action1 can contain arguments that can either be uniquely occurring variables or closed terms. The arguments of action2 can be arbitrary terms, but the variables occurring in it must also occur in action1. The condition is an expression of type "Bool" and likewise can only occur variables that also occur in "action1".
Besides an action, action2 can also be tau or delta. In case of tau then if action1 is a multi action then it will be removed and otherwise be replaced with tau. In case of delta, the action and the following process call are replaced by delta.
The renaming rules are applied from top to bottom to an linear process equation. If no value for the variables in a rename rule can be found to match an action, the next rule is applied. If no rule applies the action is left untouched. Variables in different rename rules with the same variable names are independent when being matched.
After the lps has been renamed, sum elimination and rewriting will be applied to simplify the result. This can be skipped using appropriate switches.
Rename rule conditions
Upon loading the rename file, lpsactionrename will check if the following conditions hold:
- Variables used in the condition or in the right side of a rename rule must also occur in the left side of that rename rule.
- All arguments of the action at the left hand side must either be closed terms or variables. Each variable can only occur once in the left hand side.
- All used actions and data types must be declared in the LPS file or locally.
- All conditions are data expressions of sort Bool.
- All elements are well typed with respect to the declarations in the LPS or the rename file.
Example
Consider an LPS with the process specification:
P(x:Bool) = sum y:Nat. (y < 6) -> a(x,y). P(!x);
and a rename file with the following rename rules:
act b: Bool; var v: Nat; w:Bool; rename w -> a(w,v) => b(v==5); (v==v*2)==w -> a(w,v) => tau; a(w,5) => delta;
The arguments of an action do not have to consist of a single variable, as is done in the second rename rule. In the second rename rule a(w,2*v), w and 2*v will be respectively equal to x and y from the LPS action a(x,y).
The result of applying the rename rules to the LPS without sum elimination will give:
proc P(x_P0: Bool) = true -> delta + sum w: Bool,v,y_P0: Nat. ((y_P0 < 6 && w==x_P0 && v==y_P0) && w) -> b(v==5).P(!x_P0); + sum w00: Bool,v00: Nat,w: Bool,v,y_P0: Nat. ((((y_P0 < 6 && w==x_P0 && v==y_P0) && !w) && w00==x_P0 && v00==y_P0) && (v00==v00*2)==w00) -> tau.P(!x_P0) + sum w01,w00: Bool,v00: Nat,w: Bool,v,y_P0: Nat. ((((((y_P0 < 6 && w==x_P0 && v==y_P0) && !w) && w00==x_P0 && v00==y_P0) && !((v00==v00*2)==w00)) && w01==x_P0) && 5==y_P0) -> delta + sum w01,w00: Bool,v00: Nat,w: Bool,v,y_P0: Nat. ((((((y_P0 < 6 && w==x_P0 && v==y_P0) && !w) && w00==x_P0 && v00==y_P0) && !((v00==v00*2)==w00)) && w01==x_P0) && !(5==y_P0)) -> a(x_P0, y_P0).P(!x_P0)
Most of the introduced sum variables have a single point domain, namely: u, w, w_S00, w_s01, v_S00 and in the last two summands y. These variables can be eliminated by applying sum elimination. For example: in the first summand w is equal to x. Therefore w can be substituted by x. And w can be removed from the sum since it is no longer used.
Applying sum elimination will give the following result:
proc P(x_P0: Bool) = true -> delta + sum y_P0: Nat.(y_P0 < 6 && x_P0) ->b(y_P0 == 5) .P(!x_P0); + sum y_P0: Nat.(y_P0 < 6 && !(y_P0 == y_P0 * 2)) ->tau.P(!(y_P0 == y_P0 * 2)) + (!x_P0 && x_P0) ->delta + sum y_P0: Nat.(((y_P0 < 6 && !x_P0) && !((y_P0 == y_P0 * 2) == x_P0)) && !(5 == y_P0)) -> a(x_P0, y_P0) .P(!x_P0)
Authors
Written by Jan Friso Groote and Tom Haenen.
Bug reporting
Report bugs at our issue tracking system.
lpsbinary
Replace finite sort variables by vectors of boolean variables in an LPS.
Synopsis
lpsbinary [OPTION]... [INFILE [OUTFILE]]
Short description
The lpsbinary tool replaces finite sort variables by vectors of boolean variables in the linear process specification (LPS) INFILE and write the result to OUTFILE. If INFILE is not present, stdin is used. if OUTFILE is not present, stdout is used.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- displays short intermediate messages
- -d, --debug
- displays detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Jeroen Keiren.
Bug reporting
Report bugs at our issue tracking system.
lpsbisim2pbes
Synopsis
lpsbisim2pbes[OPTION]... INFILE1 INFILE2 [OUTFILE]
Short Description
Reads two files containing an LPS, and computes a PBES that expresses bisimulation between the two. If OUTFILE is not present, standard output is used.
Options
OPTION can be any of the following:
- -bNAME, --bisimulation=NAME
- generate a PBES for the bisimulation type NAME:
'strong-bisim' for strong bisimilarity, 'weak-bisim' for weak bisimilarity,' 'branching-bisim' for branching bisimilarity, 'branching-sim' for branching simulation equivalence
- -n, --normalize
- normalize the result
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Tim Willemse and Bas Ploeger.
Reporting bugs
Report bugs at [2].
lpsconfcheck
Mark confluent tau-summands of an LPS.
Synopsis
lpsconfcheck [OPTION]... [INFILE [OUTFILE]]
Short description
The lpsconfcheck tool checks which tau-summands of the linear process specification (LPS) in INFILE are confluent and marks them by renaming their tau-actions to ctau. The resulting LPS is written to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
Options
OPTION can be any of the following:
- -a, --check-all
- check confluence of the tau-summands regarding all other summands, instead of continuing with the next tau-summand as soon as a summand is encountered that is not confluent with the current tau-summand
- -c, --counter-example
- display a valuation for which the confluence condition does not hold, in case the encountered condition is neither a contradiction nor a tautology
- -g, --generate-invariants
- try to prove that the reduced confluence condition is an invariant of the LPS, in case the confluence condition is not a tautology
- -iINVFILE, --invariant=INVFILE
- use the boolean formula (an mCRL2 data expression of sort Bool) in INVFILE as invariant
- -m, --no-marking
- do not mark the confluent tau-summands; since there are no changes made to the LPS, nothing is written to OUTFILE
- -n, --no-check
- do not check if the invariant holds before checking for confluence
- -o, --induction
- apply induction on lists
- -pPREFIX, --print-dot=PREFIX
- save a .dot file of the resulting BDD in case two summands cannot be proven confluent; PREFIX will be used as prefix of the output files
- -rNAME, --rewrite-strategy=NAME
- use rewrite strategy NAME
- -sNUM, --summand=NUM
- check the summand with number NUM only
- -tLIMIT, --time-limit=LIMIT
- spend at most LIMIT seconds on proving a single formula
- -zSOLVER, --smt-solver=SOLVER
- use SOLVER to remove inconsistent paths from BDDs:
- 'ario' for the SMT solver Ario
- 'cvc' for the SMT solver CVC3
- by default, no path elimination is applied
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Detailed description
Given an LPS:
tau-summand j is confluent with summand i if the following condition holds:
where inv() is the invariant specified using the option --invariant. In case ai is also a tau-action, this formula can be weakened to the following:
If the option --invariant is not used, the invariant is equal to true.
The tool will generate these confluence conditions for all tau-summands and tries to prove that they are tautologies using a BDD based prover for propositional formulas. In some cases lpsconfcheck indicates that a tau-summand is not confluent even though it is. The option --verbose gives insight into what the prover is doing and can be used to see if rewrite rules have to be added to the specification in order to enable the prover to determine that certain condition are indeed tautologies.
In some cases it may be useful to use an SMT solver to assist the prover. The SMT solver can further reduce BDDs by removing inconsistent paths. A specific SMT solver can be chosen using the option --smt-solver=SOLVER. Either the SMT solver Ario or CVC3 can be used. To use one of these solvers, the directory containing the corresponding executable must be in the path.
The tool can determine whether two summands are confluent in three ways and will indicate which of the methods was used while proving confluence. The three ways of determining confluence are as follows:
- If summand number 1 has been proven confluent with summand number 2, summand number 2 is also confluent with summand number 1. This method of checking confluence is called checking confluence by symmetry. If two summands are confluent by symmetry, lpsconfcheck indicates this by printing a dot ('.').
- Another way of checking the confluence of two summands is determining whether the two summands are syntactically disjoint. Two summands are syntactically disjoint if the following holds:
- The set of variables used by one summand is disjoint from the set of variables changed by the other summand and vice versa.
- The set of variables changed by one summand is disjoint from the set of variables changed by the other summand.
- If two summands are confluent because of syntactic disjointness, lpsconfcheck indicates this by printing a colon (':').
- The most time consuming way of checking the confluence of two summands is generating the confluence condition and then checking if this condition is a tautology using the prover. If two summands are proven confluent using the prover, lpsconfcheck indicates this by printing a plus sign ('+'). If the option --generate-invariants is used, the lpsconfcheck tool will try to prove that the reduced confluence condition is an invariant of the LPS, in case the confluence condition is not a tautology. If the reduced confluence condition is indeed an invariant, the two summands are proven confluent. lpsconfcheck indicates this by printing an 'i'.
If there already is an action named ctau present in the LPS as found in INFILE, an error will be reported.
Author
Written by Luc Engelen.
Bug reporting
Report bugs at our issue tracking system.
lpsconstelm
Synopsis
lpsconstelm[OPTION]... [INFILE [OUTFILE]]
Short Description
Remove constant process parameters from the LPS in INFILE and write the result to OUTFILE. If INFILE is not present, standard input is used. If OUTFILE is not present, standard output is used.
If it can be determined that certain parameters of this LPS remain constant throughout any run of the process, all occurrences of these process parameter are replaced by the initial value and the process parameters are removed from the LPS.
If the initial value of a process parameter is a global variable and remains a global variable throughout the run of the process, the process variable is considered constant.
If the initial value of a process parameter is a global variable and is only changed once to a certain value, the process parameter is constant and the specific value is used for substitution.
Options
OPTION can be any of the following:
- -c, --ignore-conditions
- ignore conditions by assuming they evaluate to true
- -f, --instantiate-free-variables
- allow free variables to be instantiated as a side effect of the algorithm
NOTE: this functionality is untested!
- -s, --remove-singleton-sorts
- remove parameters with single element sorts
- -t, --remove-trivial-summands
- remove summands with condition false
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Frank Stappers.
Reporting bugs
Report bugs at [3].
lpsinfo
Synopsis
lpsinfo[OPTION]... [INFILE]
Short Description
Print basic information on the linear process specification (LPS) in INFILE.
By default, the following information about the LPS is shown:
- number of summands
- number of tau-summands
- number of free variables
- number of process parameters
- number of action labels
- number of used versus the number of declared actions
- number of sorts
Options
OPTION can be any of the following:
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink and Frank Stappers.
Reporting bugs
Report bugs at [4].
lpsinvelm
Check invariants and use these to simplify or eliminate summands of an LPS.
Synopsis
lpsinvelm [OPTION]... --invariant=INVFILE [INFILE [OUTFILE]]
Short description
The lpsinvelm tool checks whether the boolean formula (an mCRL2 data expression of sort Bool) in INVFILE is an invariant of the linear process specification (LPS) in INFILE. If this is the case, the tool eliminates all summands of the LPS whose condition violates the invariant, and writes the result LPS to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
The tool can also be used to simplify the conditions of the summands of the given LPS.
Options
OPTION can be any of the following:
- -c, --counter-example
- display a valuation indicating why the invariant could possibly be violated if it is uncertain whether a summand violates the invariant
- -e, --no-elimination
- do not eliminate or simplify summands
- -iINVFILE, --invariant=INVFILE
- use the boolean formula (an mCRL2 data expression of sort Bool) in INVFILE as invariant
- -l, --simplify-all
- simplify the conditions of all summands, instead of just eliminating the summands whose conditions in conjunction with the invariant are contradictions
- -n, --no-check
- do not check if the invariant holds before eliminating unreachable summands
- -o, --induction
- apply induction on lists
- -pPREFIX, --print-dot=PREFIX
- save a .dot file of the resulting BDD if it is impossible to determine whether a summand violates the invariant; PREFIX will be used as prefix of the output files
- -rNAME, --rewrite-strategy=NAME
- use rewrite strategy NAME
- -sNUM, --summand=NUM
- eliminate or simplify the summand with number NUM only
- -tLIMIT, --time-limit=LIMIT
- spend at most the LIMIT seconds on proving a single expression
- -y, --all-violations
- do not terminate as soon as a violation of the invariant is found, but report all violations instead
- -zSOLVER, --smt-solver=SOLVER
- use the SOLVER to remove inconsistent paths from BDDs:
- 'cvc' for the SMT solver CVC3
- by default, no path elimination is applied
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Example of use
Consider a linear process specification
act a:Nat; b,c; act a, b, c; proc X(b1,b2:Bool) = b1 -> a.X(!b1,b2) + b2 ->b.X(true,b2 && b1) + (b1 && b2)->c.X(false,false); init X(false,true);
If the lineariser is applied to this process using mcrl22lps -D infile.mcrl2 outfile.lps, the resulting lps looks like
act c,b,a; proc P(b1_X,b2_X: Bool) = b1_X -> a . P(b1_X = !b1_X) + b2_X -> b . P(b1_X = true, b2_X = b2_X && b1_X) + (b1_X && b2_X) -> c . P(b1_X = false, b2_X = false) + delta; init P(false, true);
Inspection of this linear process shows that b1_X and b2_X cannot both be true at the same time. So, we can define this in a file invariant.inv. This linear process specification has as an invariant that
!(b1_X && b2_X)
See below for a detailed definition of an invariant.
Using lpsinvelm -v -iinvariant.inv outfile.lps outfile1.lps it is possible to check the invariant. Moreover, by default the summand with conditions that in conjunction with the invariant are false are removed. In the example above, the summand with action c is removed. Using the -l flag, the invariant is put into conjunction with the condition of each summand, and the resulting condition is simplified using the eq-BDD prover. So, applying lpsinvelm -v -l -iinvariant.inv outfile.lps outfile1.lps yields the following:
act c,b,a; proc P(b1_X,b2_X: Bool) = if(b1_X, if(b2_X, false, true), false) -> a . P(b1_X = !b1_X) + if(b1_X, false, if(b2_X, true, false)) -> b . P(b1_X = true, b2_X = b2_X && b1_X) + if(b1_X, if(b2_X, false, true), true) -> delta; init P(false, true);
Note that the conditions now have an if-then-else structure, due to the eq-BDD prover. Also note that the summand with action c has been removed.
Sometimes, this result is unreadable or the simplifications of the conditions in conjunction with the invariant is extremely time consuming. This is for instance the case if many non-boolean data types are used. In such a case the application of the tool lpsbinary can be helpful, by replacing finite data domains by boolean data domains. Using the -e flag it is possible to add the invariants to the summands, without simplifying the summands. So, by applying lpsinvelm -v -e -iinvariant.inv outfile.lps outfile1.lps the result becomes
act c,b,a; proc P(b1_X,b2_X: Bool) = (!(b1_X && b2_X) && b1_X) -> a . P(b1_X = !b1_X) + (!(b1_X && b2_X) && b2_X) -> b . P(b1_X = true, b2_X = b2_X && b1_X) + (!(b1_X && b2_X) && b1_X && b2_X) -> c . P(b1_X = false, b2_X = false) + !(b1_X && b2_X) -> delta; init P(false, true);
Note that the c summand is now still present.
The usage of lpsinvelm can be useful as a preprocessing step for symbolic reduction tools. For instance lpsconfcheck or lpsrealelm.
When an invariant is being checked, but turns out to be false, then counterexamples are very helpful (use the -c flag. Counterexamples can also be presented in dot format.
When the data types that are used in a process are complex, the prover is not able to prove that the invariant is actually an invariant. This for instance happens when inequalities are used. In such a case, the flag -n can be used to skip the check that the invariant indeed satisfies the invariant properties.
Detailed description
Given an LPS:
a formula of the form
is generated for each of the summands, where inv() is the expression passed using the option --invariant. This expression is an invariant of the LPS if it holds in the initial state and all the generated formulas are tautologies.
The invariant is used to eliminate summands as follows. A formula of the form
is generated for each of the summands or for the summand indicated using the option --summand only. The tool uses a BDD based prover for expressions of sort Bool to see if the generated formula is a contradiction. If the formula is a contradiction for some summand, this summand will be eliminated from the LPS. If the formula is not a contradiction, the summand remains unchanged unless the option --simplify-all is used.
The option --simplify-all will replace the conditions of all summands by the equivalent BDD of the condition in conjunction with the invariant passed using the option --invariant. This may enable other tools, like for instance lpsconstelm or lpsparelm, to simplify the LPS even further.
In some cases it may be useful to use an SMT solver to assist the prover. The SMT solver can further reduce BDDs by removing inconsistent paths. A specific SMT solver can be chosen using the option --smt-solver=SOLVER. Either the SMT solver Ario or CVC3 can be used. To use one of these solvers, the directory containing the corresponding executable must be in the path.
Without using the option --no-check, lpsinvelm will first check if the given expression is an invariant of the LPS. If this is not the case, no elimination or simplification will be done. In some cases the invariant may hold even though the prover is unable to determine this fact. In cases where an expression is an invariant of the LPS, but the prover is unable to determine this, the option --no-check can be used to eliminate or simplify summands anyway. Note that this also makes it possible to eliminate or simplify summands using an expression that is not an invariant of the LPS.
The option --verbose gives insight into what the prover is doing and can be used to see if rewrite rules have to be added to the specification, in order to enable the prover to determine the invariance of an expression.
Author
Written by Luc Engelen.
Bug reporting
Report bugs at our issue tracking system.
lpsparelm
Synopsis
lpsparelm[OPTION]... [INFILE [OUTFILE]]
Short Description
Remove unused parameters from the linear process specification (LPS) in INFILE and write the result to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
Options
OPTION can be any of the following:
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink and Jeroen van der Wulp, with contributions from Frank Stappers and Tim Willemse.
Reporting bugs
Report bugs at [5].
lpsparunfold
Unfold process parameters in an LPS.
Synopsis
lpsparunfold [OPTION]... --index=NUM [INFILE [OUTFILE]]
Short description
The algorithm applies a transformation on data expressions of an linear process specification (LPS), by which other tools (such as lpsparelm, lpsconstelm) can apply their transformations more effectively. In concrete, this tool unfolds a sort with associated constructor functions to a set of process parameters in the LPS, in such a way that all behaviour is preserved. The LPS is specified by INFILE and writes the result to OUTFILE. If OUTFILE is not present stdout is used. If INFILE is not present stdin is used.
Options
OPTION can be any of the following:
- -iNUM, --index=NUM
- unfolds process parameter at given index NUM
Standard options:
- -rNAME, --rewriter=NAME
- Use rewrite strategy NAME. lps2parunfold uses a term rewriting engine to manipulate data terms of the LPS. The choice of the rewriter can have influence on the performance.
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Frank Stappers.
Bug reporting
Report bugs at our issue tracking system.
lpspp
Pretty print an LPS.
Synopsis
lpspp [OPTION]... [INFILE [OUTFILE]]
Short description
The lpspp tool prints the linear process specification (LPS) from INFILE to OUTFILE in a human readable format. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
Options
OPTION can be any of the following:
- -fFORMAT, --format=FORMAT
- print the LPS in the specified FORMAT:
- default: for an mCRL2 specification (default)
- debug: like default, with the following exceptions:
- data expressions are printed in prefix notation using identifiers from the internal format
- each data equation is put in a separate data equation section
- next states of process references are printed in assignment notation
- internal: for a textual ATerm representation of the internal format
- internal-debug: like internal, with an indented layout
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Aad Mathijssen.
Bug reporting
Report bugs at our issue tracking system.
lpsrealelm
Synopsis
lpsrewr[OPTION]... [INFILE [OUTFILE]]
Short Description
Rewrite data expressions of the LPS in INFILE and save the result to OUTFILE.If OUTFILE is not present, standard output is used. If INFILE is not present,standard input is used
The following data expressions are rewritten:
- conditions, action parameters, time expressions and next states of LPS summands
- process parameters of the initial state
- conditions and right-hand sides of data equations
Rewriting LPS summands and the initial state is done to simplify these parts of the LPS. Rewriting data equations is done to speed up state space generation. In most cases, this results in a performance gain of at most 5%.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink and Muck van Weerdenburg.
Reporting bugs
Report bugs at [6].
lpsrewr
Synopsis
lpsrewr[OPTION]... [INFILE [OUTFILE]]
Short Description
Rewrite data expressions of the LPS in INFILE and save the result to OUTFILE.If OUTFILE is not present, standard output is used. If INFILE is not present,standard input is used
The following data expressions are rewritten:
- conditions, action parameters, time expressions and next states of LPS summands
- process parameters of the initial state
- conditions and right-hand sides of data equations
Rewriting LPS summands and the initial state is done to simplify these parts of the LPS. Rewriting data equations is done to speed up state space generation. In most cases, this results in a performance gain of at most 5%.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink and Muck van Weerdenburg.
Reporting bugs
Report bugs at [7].
lpssim
Command-line simulation of an LPS.
Synopsis
lpssim [OPTION]... INFILE
Short description
The lpssim tool simulates the linear process specification (LPS) in INFILE using a command-line interface.
In the first screen, lpssim shows the state vector of the initial state and a list of all possible transitions that can be taken from this state. These transitions are numbered from 0 onwards. For each transition, the state vector of the state that is reached after taking that transition, is shown. When a transition has been taken, lpssim shows the action label of that transition, the state vector of the current state and (again) a list of numbered transitions that can be taken from the current state along with the state vector of the resulting state, respectively.
On the lpssim command-line - which starts with a question mark '?' - the following commands can be entered:
- n
- Execute the action with number n from the list of actions that are possible in the current state.
- u, undo
- Go to previous state in the trace.
- r, redo
- Go to next state in the trace.
- i, initial
- Go to initial state. Note that this preserves the trace; it is equivalent to goto 0.
- g n, goto n
- Go to position n of the trace.
- t, trace
- Print the current trace. The current position in the trace is indicated with >.
- l filename, load filename
- Load a trace from filename.
- s filename, save filename
- Save the current trace to filename.
- h, help
- Display a help message explaining the available commands.
- q, quit, Ctrl-D
- Quit lpssim.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
- -y, --dummy
- replace free variables in the LPS with dummy values
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
For a simulator that uses a graphical user interface, see the lpsxsim tool.
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
lpssumelm
Remove superfluous summations from an LPS.
Synopsis
lpssumelm [OPTION]... [INFILE [OUTFILE]]
Short description
The lpssumelm tool removes superfluous summations from the linear process specification (LPS) in INFILE and write the result to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
The simplest case this tool handles is that, whenever a summation variable does not occur in the other terms of the summand, this summation variable is plainly removed. There is however also a more complex situation where the summation variable occurs in an equality within the condition. There is an axiom that says that we may then substitute the other term of the equality for the summation variable. We can then remove both the summation variable and the condition in which it occurred.
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Known issues
Lpssumelm is not applicable if types in an equality in a condition do not match directly, i.e. an implicit type cast is used in order to match the types. An example of this is the following process:
proc P(i : Int) = sum n : Nat . (n == i) -> tau . P(i); init P(5);
In this example an implicit cast Nat2Int (i.e. Nat2Int(n) == i) is used in order to have compatible types. Because of this, the tool is unable to remove the summation over n.
Author
Written by Jeroen Keiren.
Bug reporting
Report bugs at our issue tracking system.
lpssuminst
Instantiate summation variables of an LPS.
Synopsis
lpssuminst [OPTION]... [INFILE [OUTFILE]]
Short description
The lpssuminst tool instantiates summation variables of the linear process specification (LPS) in INFILE and writes the result to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE, stdout is used.
Options
OPTION can be any of the following:
- -f, --finite
- only instantiate variables whose sorts are finite
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
- -t, --tau
- only instantiate variables in tau summands
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Detailed description
Summation variables are instantiated by applying induction on the values of the sort of the variable. Take for example the following LPS:
sort D = struct d1 | d2; E = struct e1(D) | e2; act a: D; b: E; proc P = sum d: D. a(d) . P + sum e: E. b(e) . P ; init P;
lpssuminst instantiates the variable 'd' to the constructors 'd1' and 'd2' of sort 'D', and variable 'e' to the constructors 'e1(d1)', 'e1(d2)' and 'e2':
sort D = struct d1 | d2; E = struct e1(D) | e2; act a: D; b: E; proc P = a(d1) . P + a(d2) . P + b(e1(d1)) . P + b(e1(d2)) . P + b(e2) . P ; init P;
Author
Written by Jeroen Keiren.
Bug reporting
Report bugs at our issue tracking system.
lpsuntime
Remove time from an LPS.
Synopsis
lpsuntime [OPTION]... [INFILE [OUTFILE]]
Short description
The lpsuntime tool removes time from the linear process specification (LPS) in INFILE and writes the result to OUTFILE. IF INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
The process equation section of an LPS is of the following form:
proc P(d: D) = sum e_0: E_0. c_0(d,e_0) -> a_0(f_0(d,e_0)) @ t_0(d,e_0) . P(g_0(d,e_0)) + sum e_1: E_1. c_1(d,e_1) -> a_1(f_1(d,e_1)) @ t_1(d,e_1) . P(g_1(d,e_1)) + ... ;
The tool transforms this to the following equivalent untimed version:
proc P(d: D, t: Real) = sum e_0: E_0. (c_0(d,e_0) && t_0(d,e_0)) -> a_0(f_0(d,e_0)) . P(g_0(d,e_0),t_0(d,e_0)) + sum e_1: E_1. (c_1(d,e_1) && t_1(d,e_1)) -> a_1(f_1(d,e_1)) . P(g_1(d,e_1),t_1(d,e_1)) + ... ;
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Jeroen Keiren.
Bug reporting
Report bugs at our issue tracking system.
lpsxsim
Graphical simulation of an LPS.
Synopsis
lpsxsim [OPTION]... [INFILE]
Short description
The lpsxsim tool simulates the linear process specification (LPS) in INFILE using a graphical user interface. If INFILE is not supplied the simulator starts without an LPS. The interface consists of two parts. In the top part every transition that is possible from the current state, is listed including the changes to the state vector that would result from executing that transition. A transition can be executed by double clicking it. In the bottom part, the state vector of the current state is shown.
Apart from basic simulation, lpsxsim provides the following additional functionalities:
- A trace can be loaded from a .trc file. Also, the action trace executed so far can be saved to a .trc file.
- Loaded traces and random traces can be played automatically.
- The action trace executed so far can be shown in a separate window.
- A plugin can be loaded dynamically. This plugin connects to the running lpsxsim application and can respond to actions taken in the basic lpsxsim interface. This functionality can be used by plugins that provide a visual representation of the system being simulated to keep that visual representation up-to-date with the current state in the basic lpsxsim interface. Such plugins can give the user a better overview / understanding of what is going on in the system being simulated.
- Various options can be set.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
- -y, --dummy
- replace free variables in the LPS with dummy values
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
For a simulator that uses a command-line interface, see the lpssim tool.
Authors
Written by Muck van Weerdenburg and Jeroen van der Wulp.
Bug reporting
Report bugs at our issue tracking system.
lts2lps
Synopsis
lts2lps[OPTION] [INFILE [OUTFILE]]
Short Description
Translates an LTS in INFILE and writes the resulting LPS to OUTFILE. If OUTFILE is not present, standard output is used. If INFILE is not present, standard input is used. This tool is useful when an labelled transition system in .aut, .svc, .fsm or .lts must be processed. Such processing tools are generally only available on linear processes. By transforming the transition system to a linear process, such processing can be performed. For processing one can typically think on model checking a process, or applying lpsactionrename to the process.
Note that if the labelled transition system does not provide information on the data types and has no action declarations, these must be provided separately. Only the .lts format contains such information. There are several ways to provide this extra required info.
Options
OPTION can be any of the following:
- -DFILE, --data=FILE
- use FILE as the data and action specification. FILE must be a .mcrl2 file which does not contain an init clause.
- -lFILE, --lps=FILE
- use FILE for the data and action specification. FILE must be a .lps file.
- -mFILE, --mcrl2=FILE
- use FILE as the data and action specification for the LTS. FILE must be a .mcrl2 file.
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Frank Stappers; extended by Jan Friso Groote.
Reporting bugs
Report bugs at [8].
ltscompare
Compare two LTSs.
Synopsis
ltscompare [OPTION]... [INFILE1] INFILE2
Short description
The ltscompare tool determines whether or not the labelled transition systems (LTSs) in INFILE1 and INFILE2 are related by some equivalence or preorder. If INFILE1 is not supplied, stdin is used.
The input formats are determined by the content of INFILE1 and INFILE2. The options --in1 and --in2 can be used to force the format of INFILE1 and INFILE2, respectively. The supported formats are:
- aut: for the Aldebaran format (CADP)
- bcg: for the Binary Coded Graph format (CADP) (if BCG support is enabled)
- dot: for the GraphViz format
- fsm: for the Finite State Machine format
- mcrl: for the mCRL SVC format
- mcrl2: for the mCRL2 format (default)
- svc: for the (generic) SVC format
Options
OPTION can be any of the following:
- -eNAME, --equivalence=NAME
- use equivalence NAME:
- bisim: for strong bisimilarity
- branching-bisim: for branching bisimilarity
- sim: for strong simulation equivalence
- trace: for strong trace equivalence
- weak-trace: for weak trace equivalence
- Note: this option is not allowed in combination with -p/--preorder.
- -iFORMAT, --in1=FORMAT
- use FORMAT format as the format for INFILE1 (or stdin if INFILE1 is not supplied)
- -jFORMAT, --in2=FORMAT
- use FORMAT format as the format for INFILE2
- -pNAME, --preorder=NAME
- use preorder NAME:
- sim: for strong simulation preorder
- trace: for strong trace preorder
- weak-trace: for weak trace preorder
- Note: this option is not allowed in combination with -e/--equivalence.
- --tau=ACTNAMES
- consider actions with a name in the comma separated list ACTNAMES to be a internal (tau) actions in addition to those defined as such by the input; this means that before comparing the LTSs all specified actions are first replaced by tau actions
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
ltsconvert
Convert and optionally minimise an LTS.
Synopsis
ltsconvert [OPTION]... [INFILE [OUTFILE]]
Short description
The ltsconvert tool converts the labelled transition system (LTS) in INFILE to OUTFILE in the requested format after applying the selected minimisation method to INFILE (default is no minimisation). If OUTFILE is not supplied, stdout is used. If INFILE is not supplied, stdin is used.
The output format is determined by the extension of OUTFILE, whereas the input format is determined by the content of INFILE. Options --in and --out can be used to force the input and output formats. The supported formats are:
- aut: for the Aldebaran format (CADP)
- bcg: for the Binary Coded Graph format (CADP) (if BCG support is enabled)
- dot: for the GraphViz format
- fsm: for the Finite State Machine format
- mcrl: for the mCRL SVC format
- mcrl2: for the mCRL2 format (default)
- svc: for the (generic) SVC format
In order to convert a non-mCRL2 LTS to a mCRL2 LTS one needs to supply the original LPS with --lps. This is because actions need to be stored in the internal mCRL2 format in mCRL2 and in non-mCRL2 LTSs are represented by strings (lacking essential information such as data types).
Note that tools that use the fsm format may depend on state information and parameter names. This requires that this information is available in the input LTS file or that the --lps option is used (see the options sections below).
Options
OPTION can be any of the following:
- -a, --add
- do not minimise but save a copy of the original LTS extended with a state parameter indicating the bisimulation class a state belongs to; this means that every state is extended with a number in such a way that (only) equivalent states have the same number (this option only works for mCRL2 LTSs)
- -D, --determinise
- determinise the LTS
- -eNAME, --equivalence=NAME
- generate an equivalent LTS, preserving equivalence NAME:
- bisim: minimise modulo strong bisimilarity
- branching-bisim: minimise modulo branching bisimilarity
- sim: minimise modulo strong simulation equivalence
- trace: determinise and then minimise modulo trace equivalence
- weak-trace: determinise and then minimise modulo weak trace equivalence
- -iFORMAT, --in=FORMAT
- use FORMAT format as the input format
- -lFILE, --lps=FILE
- use FILE as the LPS from which the input LTS was generated; this is needed to store the correct parameter names of states when saving in fsm format and to convert non-mCRL2 LTSs to a mCRL2 LTS
- -n, --no-state
- leave out state information when saving in dot format
- --no-reach
- do not perform reachability check on the input LTS
- --none
- do not minimise the LTS (this is the default)
- -oFORMAT, --out=FORMAT
- use FORMAT format as the output format
- --tau=ACTNAMES
- consider actions with a name in the comma separated list ACTNAMES to be a internal (tau) actions in addition to those defined as such by the input; this means that before minimisation all specified actions are first replaced by tau actions; in the case --add is used, these tau actions will only used internally to compute the equivalence classes; the output will have the original actions
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
In case ltsconvert requires too much memory for bisimulation reductions one can try the ltsmin tool. Note, however, that this tools is deprecated and can only handle files in the mCRL2 SVC format.
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
ltsgraph
Visualise an LTS as a graph and manipulate its layout.
Synopsis
ltsgraph [OPTION]... [INFILE]
Short description
The ltsgraph tool draws the graph described by INFILE using a graphical user interface. If INFILE is not supplied the tool starts without a drawing. INFILE can have any one of the following extensions:
- .aut: Aldebaran format (CADP)
- .bcg: Binary Coded Graph format (CADP)
- .dot: GraphViz format
- .fsm: Finite State Machine format
- .lts: mCRL2 format
- .xml: ltsgraph layout format
- .svc: mCRL or (generic) format
The main window of the tool shows the labelled transition system described by the input file as a directed, labelled graph. Using the dialogs found in the "Tools" menu, the graph's layout and several other visualization settings can be manipulated. The layout of the graph can also be manipulated by dragging vertices (states).
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Detailed description
Theory
The ltsgraph tool uses a basic force directed layout method to position the vertices in a 2 dimensional space. In general such layout methods use a force system based on vertices and edges. The goal is to find an equilibrium state, where the sum of forces is 0. The method used by ltsgraph uses springs and electrical forces. vertices are modelled as electrically charged particles that repel each other more when they come closer together. Edges are modelled as springs that generate a force on both connected vertices depending on the zero-energy length of the spring. The spring exerts an repelling force when smaller than zero-energy length and a attractive force otherwise.
Write xu,yu for the x-coordinate respectively the y-coordinate of a vertex u. Let u and v be atbitrary vertices and d(u,v) be a distance measure (usually Euclidean distance). The x-component of the electrical (repelling) force that a vertex u exerts on vertex v is defined as follows:

Where eu,v represents the strength of the electrical repulsion between u and v. Let u and v be vertices such that
. The x-component of the force exerted by the spring on v is:

Where su,v is the stiffness of the spring and lu,v is the zero-energy length of the spring between points u and v. The observant reader may point out that the last definition does not follow Hook's law that describes how a spring works in the physical world. Instead we used the alternate spring model more suitable for the purpose of computing graph layouts <ref name=[Eades84]>P.A. Eades, “A heuristic for graph drawing”, Congressus Nutnerantiunt, vol. 42, pages 149–160, 1984</ref>.
An algorithm is needed to simulate these forces and apply them to generate new graph layouts. The input to the algorithm is a graph (V,E) and an arbitrary existing layout for a graph. The algorithm computes the sum of electric forces:

The new position of a vertex v is then computed from the old coordinates by applying the total force:

A single run of the algorithm computes a new set of coordinates for all vertices: the new layout. Repeating this process until the sum of all forces is zero gives an optimal layout.
The ltsgraph tool offers three parameters e, s and l that can be used to interactively guide the positioning algorithm. There is a simple link between these three parameters and the force models described above. For all e = eu,v,s = su,v,l = lu,v for all u and v.
Functionality
The ltsgraph tool generates two dimensional graph layouts for transition systems and has some edit functionality. Apart from basic drawing, provides the following additional functionalities:
- States can be dragged and dropped by the left click.
- States colour can be changed by using the settings menu.
- Graph layout can be optimized using the force-based algorithm described above, available from the tools menu.
- States can be locked by the right click. Locked states can still be dragged and dropped but the layout algorithm will not move such nodes.
- Transitions can be curved by clicking the corresponding checkbox in the settings dialog and dragging the diamond-shaped control points.
- A layout can be exported to LaTeX and SVG formats, as well as an XML format describing the layout and settings of the graph. This XML format can later be imported into the tool.
References
<references />
Author
Written by Carst Tankink.
Bug reporting
Report bugs at our issue tracking system.
ltsinfo
Display basic information about an LTS.
Synopsis
ltsinfo [OPTION]... [INFILE]
Short description
The ltsinfo tool prints information about the labelled transition system (LTS) in INFILE. If INFILE is not supplied, stdin is used.
The format of INFILE is determined by its contents. The option --in can be used to force the format for INFILE. The supported formats are:
- aut: for the Aldebaran format (CADP)
- bcg: for the Binary Coded Graph format (CADP) (if BCG support is enabled)
- dot: for the GraphViz format
- fsm: for the Finite State Machine format
- mcrl: for the mCRL SVC format
- mcrl2: for the mCRL2 format (default)
- svc: for the (generic) SVC format
Options
OPTION can be any of the following:
- -eNAME, --equivalence=NAME
- use equivalence NAME for deterministic check:
- isomorph: for isomorphism (default)
- bisim: for strong bisimilarity
- branching-bisim: for branching bisimilarity
- none: for not performing the check at all
- -iFORMAT, --in=FORMAT
- use FORMAT format as the input format
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
ltsmin
Minimise an LTS in SVC format (DEPRECATED)
Synopsis
ltsmin [OPTION]... INFILE OUTFILE
Short description
The ltsmin tool minimises the labelled transition system (LTS) in the SVC format from INFILE using bisimulation reduction and saves the resulting LTS to OUTFILE.
The input SVC file must have been generated by lps2lts.
Note that this tools is deprecated and ltsconvert should be used where possible.
Options
OPTION can be any of the following:
- -a, --add
- do not minimise but save a copy of the original LTS extended with a state parameter indicating the bisimulation class a state belongs to
- -eNAME, --equivalence=NAME
- use equivalence NAME:
- strong: for strong bisimulation (default)
- branching: for branching bisimulation
- --tau=ACTNAME
- consider action with name ACTNAME to be an internal (tau) action
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
For minimising other types of LTSs or transforming one type into another see the ltsconvert tool.
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
ltsview
3D interactive visualisation of an LTS.
Synopsis
ltsview [OPTION]... [INFILE]
Description
The ltsview tool visualises the LTS in INFILE using a graphical user interface. If INFILE is not supplied, the tool starts with no file opened. The supported LTS formats are:
- aut: for the Aldebaran format (CADP)
- bcg: for the Binary Coded Graph format (CADP) (if BCG support is enabled)
- dot: for the GraphViz format
- fsm: for the Finite State Machine format
- mcrl: for the mCRL SVC format
- mcrl2: for the mCRL2 format (default)
- svc: for the (generic) SVC format
The tool clusters states based on structural properties. These clusters are then visualised to form a backbone of the LTS on which the states and transitions can be drawn. The tool provides functionalities to explore the visualisation (zooming, panning, rotating), mark deadlocks, mark states based on the values of their state vector parameters and mark transitions based on their labels. An image of the visualisation can also be saved in various bitmap formats.
Options
OPTION can be any of the following standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
See also
The visualisation techniques are based on the techniques described here and in <ref> F. van Ham, H. van de Wetering and J.J. van Wijk. Visualization of State Transition Graphs. In: Proc. IEEE Symp. Information Visualization 2001, IEEE CS Press, pp. 59-66, 2001. </ref>.
References
<references />
Author
Written by Bas Ploeger and Carst Tankink.
Bug reporting
Report bugs at our issue tracking system.
lysa2mcrl2
Convert a Typed LySa specification to an mCRL2 process specification. (EXPERIMENTAL)
Synopsis
lysa2mcrl2[OPTION]... [INFILE [OUTFILE]]
Short Description
Converts a security protocol specified in Typed LySa in INFILE into an mCRL2 process specification in OUTFILE. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
Options
OPTION can be any of the following:
- -aNUM, --attacker-index=NUM
- Assume that the attacker may be a legitimate (but dishonest) agent participating in the protocol, corresponding to meta-level index number NUM. The effect of setting this option is that the attacker's crypto-point CPDY is added to all dest/orig clauses where one or more of the current meta-variables equal NUM. This option corresponds to the attackerIndex option of the LySa tool.
- -l, --lysa
- Converts a Typed LySa process to LySa and not to mCRL2. Makes all other non-standard options illegal.
- -i[PREFIX], --prefix-idents[=PREFIX]
- Prefixes all identifiers found in the Typed LySa process in INPUT with an underscore or with PREFIX to prevent clashes with mCRL2 keywords or identifiers used in the preamble.
- -s[STRATEGY], --strategy[=STRATEGY]
- Apply conversion using the specified strategy:
- 'straightforward' for a straightforward conversion; most likely this yields an infinite state space.
- 'symbolic' for a conversion in which symbolic representations are chosen to represent possibly infinite numbers of ciphertexts and names (default).
- -z, --zero-action
- Generates a 'zero' action before deadlocking when Typed LySa's empty process (0) is encountered. This is a valid action in the supplied preambles. This option may help to differentiate between a deadlock and a correct protocol run termination.
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Egbert Teeselink.
Reporting bugs
Report bugs at [9].
mcrl22lps
Translate an mCRL2 specification to a linear process specification (LPS).
Synopsis
mcrl22lps [OPTION]... [INFILE [OUTFILE]]
Short description
The tool mcrl22lps translates an mCRL2 process specification to a linear process specification (LPS). The input is read from INFILE and the output is written to OUTFILE. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
The input process specification should adhere to its syntax description (see also the language reference for more information).
The process in the input must be in parallel pCRL format. This means that it must consist of the parallel composition of a set of processes that are described using actions, conditions, sum operators, timing, sequential and alternative composition operators only. The parallel, communication and renaming operators can only be used on the outer level. Typical input examples are found in the directory examples of the mCRL2 repository.
For certain inputs, mcrl22lps can take a large amount of time. In some cases it will not terminate, for instance with a non terminating rewrite rules. The following options can be used to speed up the linearisation, at the expense of a less readable result.
The option --lin-method=stack avoids non termination if the process structure is not regular. The option --no-rewrite causes rewriting to be switched off, avoiding non termination due to non terminating rewrite rules. The option --no-sumelm avoids the use of sum elimination, which under certain circumstances may take a lot of time. Finally, the option --no-deltaelm avoids removal of spurious delta summands, which uses a quadratic algorithm in the number of summands, and therefore, may be very time consuming.
The option --timed assumes that the timing of the input is strict. By default it is assumed that time can always progress in the sense that each process p is interpreted as p+delta, which is incorrect as it does not preserve time. For instance the process a@1 is interpreted as a@1+delta, meaning that the a does not have to happen at time 1. If time is important, the option --timed is required. However, this may lead to substantially increased linearisation times and an increased size of the linear process.
Options
OPTION can be any of the following:
- -a, --statenames
- Using this option, the names of generated data parameters are extended with the name of the process in which they occur. In this way it is easier to determine where the parameter comes from.
- -b, --binary
- This option causes all generated finite sorts to be encoded using boolean. These finite sorts are generated when clustering and when generating state variables. See --cluster and --newstate.
- -c, --cluster
- This option causes the output linear process to be clustered. This option is not used by default. Clustering means that summands with the same action labels are taken together. For instance, a(f1)·P(g1) + a(f2)·P(g2) is replaced by ∑b:Bool a(if(b,f1,f2))·P(if(b,g1,g2)). The advantage is that the number of summands can be reduced substantially in this way. The disadvantage is that sum operators are introduced and new data sorts with auxiliary functions are generated. In order to avoid the generation of new sorts, the option --binary can be used which causes all new sorts to be encoded using booleans.
- -D, --delta
- With this option a (untimed) delta summand is added to each state of each process. This influences the behaviour of timed processes in the sense that processes can also choose to idle, without being forced to perform an action. For untimed processes this was already the case, and there is no effect on the semantics. The advantage of this option is that the delta can subsume all other conditional and timed delta's reducing the number of delta summands in the resulting linear process. Furthermore, as processing delta summands can be very time consuming, this option can make linearisation substantially faster.
- -e, --check-only
- Using this option mcrl22lps only checks the syntax and the static semantics of the input, but it will not execute the linearisation process. This is useful to check whether the input is proper mCRL2.
- -f, --no-globvars
- When linearising, there are several places where the values of data variables are irrelevant for the behaviour of the process. E.g. when linearising the process X = ∑d:D read(d)·send(d)·X, the value of the variable d has no meaning after the send action. In this case a 'global variable' is introduced to indicate that the value of this variable can be chosen freely. As the number of global variables can become quite large, the generation of such variables can be avoided by using this option. In this case a dummy value is chosen, which is the same for each sort.
- -g, --no-deltaelm
- With this option the linearisation will not attempt to remove spurious delta summands. Due to the existence of time, delta summands cannot be omitted. Due to the presence of multi-actions the number of summands can be huge. The algorithm for removing delta summands simply works by comparing each delta summand with each other summand to see whether the condition of the one implies the condition of the other. Clearly, this has quadratic complexity, and can take a long time.
- -lNAME, --lin-method=NAME
- Use linearisation method NAME:
- stack: The LPS is generated using stack data types. The non parallel processes are transformed to restricted Greibach Normal Form and straightforwardly translated to linear processes using a stack. The resulting linear processes are then put in parallel. This works for any allowed input. Unfortunately, the linear process that is the result of this operation can basically only be used for state space generation. Symbolic operations on the stacks are generally not very effective, because the stack data type is too complex. For symbolic analysis, linearisation methods regular or regular2 can be used.
- regular: The non parallel processes are translated to restricted Greibach Normal Form. Instead of using a stack, these processes are translated to an LPS with finite control variables. If some process has an infinite number of control states, the tool will attempt to generate all of them, causing it to run out of memory. In such a case the stack method can be used to produce a linear process.
- The regular method is almost the same as regular2. The only difference is in the way new process variables are generated: regular generates less parameters in the linear process than regular2, but regular2 generates an LPS in a few cases where the use of regular leads to non-termination.
- The difference between the two methods is explained best by an example. The tool sometimes has to replace a sequence of process variables by a single new variable. For instance, P1(f(x)) · P2(g(x)) must be replaced by a new process P. With the regular method, the new process has a single parameter x, matching the single free variable x. I.e. the definition of P is P(x) = P1(f(x)) · P2(g(x)). With the regular2 method a variable is introduced for every term. In this latter case P is defined by P(y,z) = P1(y) · P2(z) and the expression P1(f(x)) · P2(g(x)) is replaced by P(f(x),g(x)).
- We give an example in which linearisation with regular fails to terminate and the use of regular2 succeeds. Consider the process definition P(n:Nat) = a·P(n+1) + b and let the initial process be P(0)·δ. Now with regular infinitely many new processes are generated, each of the following form: P(0)·δ, P(1)·δ, etc. With regular2 only one new process is generated, namely one for P(n)·δ.
- The regular method is used by default.
- regular2: See the explanation of regular. Note that with this option the number of parameters can be very large, and consequently, the number of global variables can be huge too. In this case, linearising using the option -f,--no-globvars is advisable.
- -m, --no-sumelm
- This option causes the linearisation to avoid sum elimination. If there is a condition or part of a condition of the form x = t with x a variable bound in a sum operator, then the term t can often be substituted for x, and the sum over x can be removed. Sometimes searching for equations x = t can be very time consuming. Using the flag --no-sumelm sum elimination can be switched off.
- -n, --no-cluster
- This option prevents clustering of linear processes before they are put in parallel. By default these processes are clustered to avoid a blow-up in the number of summands when transforming two parallel linear processes into a single linear process. If a linear process with M summands is put in parallel with a linear process with N summands the resulting process has M×N + M + N summands. Both M and N can be substantially reduced by clustering at the cost of introducing new sorts and functions. See --cluster, esp. for a short explanation of the clustering process.
- -o, --no-rewrite
- This option prevents intermediate rewriting of terms. This is especially useful when the equations in the input specification are not terminating, as in this case the lineariser will not terminate.
- -rNAME, --rewriter=NAME
- Use rewrite strategy NAME. mcrl22lps simplifies data expressions using the
rewriter. To prevent rewriting the option -o, --no-rewrite can be used.
- -w, --newstate
- The sort of state variables is by default Pos, i.e. positive natural numbers. By using this option new finite sorts named Enumk are generated where k is the size of the domain. Also, auxiliary case functions and equalities are defined. In combination with the option --binary the finite sorts are encoded by booleans.
- -z, --no-alpha
- By default mcrl22lps attempts to distribute communication, hiding and allow operators over the parallel composition operator as this reduces the size of intermediate linear processes. By using this option, this step can be avoided. The name stems from the alphabet axioms in process algebra.
Standard options:
- -q, --quiet
- Do not display warning messages.
- -v, --verbose
- Display short intermediate messages.
- -d, --debug
- Display detailed intermediate messages.
- -h, --help
- Display help information.
- --version
- Display version information.
Author
Written by Jan Friso Groote.
Bug reporting
Report bugs at our issue tracking system.
mcrl2-gui
Synopsis
mcrl2-gui[OPTION]...
Short Description
A graphical front-end for mCRL2 tools
Options
OPTION can be any of the following: Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Detailed Description
mCRL2-gui provides a graphical user interface for mCRL2 tools. It gives the user the ability to edit, analyze and apply transformations to files that are affiliated to mCRL2. Furthermore, it gives the user feedback on the tools that are applied for analysis and transformation.
Graphical User Interface
The interface is divided into three panels. Each panel serves a different purpose. Panels can be moved, re-sized, hidden or shown.
File Browser
The File Browser is a file manager application that provides a graphical user interface for accessing the file systems for non-hidden files on disk. The file browser uses a tree-view representation. Nodes display folders and volumes, leaves of the tree represent files on disk. Both nodes and leaves can be subjected to manipulation. The available manipulations can differ per node or leave. These manipulations be addressed by right-clicking on an element in the tree, pressing the "menu" button (when the File Browser has focus), or using a short-cut key. mCRL2-gui offers the possibility to analyze and transform files that have a matching extension recognized by tools within the mCRL2-toolset. Recognized extensions can be found in the File_formats section. The figure below shows the options that are available for a file that has the "lps" extension.
Options:
- Edit: Edit a file. This option allows a user to edit a file with the default system editor related to the file extension. In case no editor is defined, or a user prefers another editor, a custom editor can be set in the Windows->Preferences.
- Analysis: Allows a user to analyze a file. Information about the tools for analysis can be found in the Tool_manual_pages section.
- Transformation: Allows a user to transform a file. Information about the tools for transformation can be found in the Tool_manual_pages section.
- New File: Creates an empty file on disk.
- New Directory: Creates an new (empty directory) on disk.
- Copy file: Duplicates a file on disk in the selected directory.
- Rename: Rename a file/directory.
- Delete: Deletes a file/directory.
- Refresh: Refreshed the tree view structure.
- Details: Shows detailed information about the file/folder.
Executed commands
The executed commands panel shows the commands that have been executed during the analysis and transformation on files. Each line specifies a command that can be executed from a shell. This panel provides the user the possibility to select, deselect, copy, and save the executed commands.
Configuration panel
The configuration panel is used to configure and run tools. The configuration panel is displayed after selecting either the analysis or transformation option. The configuration panel shows a notebook. Each instance of a tool is displayed in a separate notebook tab. Each tab is divided into two sub-tabs. The first tab displays the tool specific options, whereas the other displays the output produced by a tool during execution. The tab that displays the tool specific options allows a user to configure and run a tool. The tab that displays the output of tool, can also be used to re-run the tool, copy the output to clipboard or save the output to a file.
Preferences
The preferences windows allows a user to customize mcrl2-gui. Currently, it only facilitates options for editing files. The preferences window can be accessed through Window->Preferences. The preferences hold after the "save" button has been pressed.
Editors are associated to file type extensions. To override system defined editors, or set a custom editor for a specific file type extension, a user should specify the command that is required to edit the file. The left column displays the extension, the right column display the invoked command. The string %s specifies the wildcard for the file invoked for editing.
For example, editing files with the "mcrl2" extension with open OpenOffice Writer requires a user to add or edit the mapping for "mcrl2" files. Say, OpenOffice Writer is located at:
/usr/bin/oowriter
then a user should specify the mapping as:
/usr/bin/oowriter %s
for files with the "mcrl2" extension.
Author
Written by Frank Stappers.
Reporting bugs
Report bugs at [10].
mcrl2i
Interpreter for the mCRL2 data language.
Synopsis
mcrl2i [OPTION]... [INFILE]
Short description
The mcrl2i tool provides a textual interface to experiment with data expressions. It evaluates mCRL2 data expressions via a text-based interface. If INFILE is present and if it contains an LPS or PBES, the data types of this specification may be used. If no input file is given, only the standard numeric datatypes are available. Stdin is ignored.
When mcrl2i is started a prompt is displayed. The following commands are available to manipulate mcrl2 data expressions. Essentially, there are commands to rewrite and type expressions, as well as generating the solutions for a boolean expression. The expressions can contain assigned or unassigned variables. Note that there are no bounds on the number of steps to evaluate or solve an expression, nor is the number of solutions bounded. Hence, the assign, eval solve commands can give rise to infinite loops.
- h[elp]
- print help message
- q[uit]
- quit mcrl2i
- t[ype] EXPRESSION
- print type of EXPRESSION
- a[ssign] VAR=EXPRESSION
- evaluate the EXPRESSION and assign it to the variable VAR.
- v[ar] VARLIST
- declare variables in VARLIST
- r[ewriter] STRATEGY
- use STRATEGY for rewriting (see rewrite strategies)
- e[val] EXPRESSION
- rewrite EXPRESSION and print result.
- s[solve] <VARLIST> EXPRESSION
- give all valuations of the variables in VARLIST that satisfy EXPRESSION
VARLIST is of the form x,y,...: S; ... v,w,...: T.
The interface has changed in svn revision 6088. For mcrl2i with revision number lower than 6088 the mcrl2i --help explains the old interface.
Options
OPTION can be any of the following:
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Known Issues
Parsing of data expressions may lead to a new data specification which the rewriter knows nothing about. This could cause unexpected behaviour.
Author
Written by Muck van Weerdenburg. Changed by Jan Friso Groote (April 2009, revision 6088).
Bug reporting
Report bugs at our issue tracking system.
pbes2bes
Synopsis
pbes2bes[OPTION]... [INFILE [OUTFILE]]
Short Description
Reads the PBES from INFILE and writes an equivalent BES to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
Options
OPTION can be any of the following:
- -H, --hashtables
- use hashtables when substituting in bes equations, and translate internal
expressions to binary decision diagrams (discouraged, due to performance)
- -oFORMAT, --output=FORMAT
- use output format FORMAT:
'vasy', 'pbes' (save as a PBES in internal format), 'cwi', 'bes' (default, save as a BES in internal format)
- -p[NAME], --pbes-rewriter[=NAME]
- use pbes rewrite strategy NAME:
'simplify' for simplification 'quantifier-all' for eliminating all quantifiers 'quantifier-finite' for eliminating finite quantifier variables 'pfnf' for rewriting into PFNF normal form
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- -sSTRAT, --strategy=STRAT
- use strategy STRAT (default '0');
0) Compute all boolean equations which can be reached from the initial state, without optimization (default). This is is the most data efficient option per generated equation. 1) Optimize by immediately substituting the right hand sides for already investigated variables that are true or false when generating an expression. This is as memory efficient as 0. 2) In addition to 1, also substitute variables that are true or false into an already generated right hand side. This can mean that certain variables become unreachable (e.g. X0 in X0 and X1, when X1 becomes false, assuming X0 does not occur elsewhere. It will be maintained which variables have become unreachable as these do not have to be investigated. Depending on the PBES, this can reduce the size of the generated BES substantially but requires a larger memory footprint. 3) In addition to 2, investigate for generated variables whether they occur on a loop, such that they can be set to true or false, depending on the fixed point symbol. This can increase the time needed to generate an equation substantially
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
- -t, --tree
- store state in a tree (for memory efficiency)
- -u, --unused_data
- do not remove unused parts of the data specification
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Jan Friso Groote.
Reporting bugs
Report bugs at [11].
pbes2bool
Determine whether a PBES is valid by translating it to a BES.
Synopsis
pbes2bool [OPTIONS]... [[INFILE] [OUTFILE]]
Short description
The tool pbes2bool computes a boolean equation system (BES) of the parameterised boolean equation system (PBES) in INFILE. Unless indicated otherwise, pbes2bool subsequently tries to solve the BES.
Options
OPTION can be any of the following:
- -c --counter
- print at the end a tree labelled with instantiations of the left hand side of equations; this tree is an indication of how pbes2bool came to the validity/invalidity of the PBES
- -H --hashtables
- use hashtables when substituting in bes equations, and translate internal expressions to binary decision diagrams (the use of this flag is discouraged, due to heavy performance penalties)
- -oFORMAT --output=FORMAT
- use output format FORMAT:
- 'none': no output is printed, and the BES is solved within pbes2bool (default)
- 'cwi': output is printed is a very straightforward BES format to be used by tools developed at CWI; the BES is not solved
- 'vasy': output BES is printed for use within the CADP toolset; the BES is not solved
- 'pbes': output BES in internal PBES format suitable for further processing in the toolset; the BES is not solved
- -p --precompile
- precompile the pbes for faster rewriting; does not work when the toolset is compiled in debug mode
- -rNAME --rewriter=NAME
- use rewrite strategy NAME
- -sNUMBER --strategy=NUMBER
- use strategy NUMBER (default '0') to generate the BES:
- '0': Compute all boolean equations which can be reached from the initial state, without any optimization. This is is the most data efficient option per generated equation. (default)
- '1': Optimize by immediately substituting the right hand sides for already investigated variables that are true or false when generating an expression. This is as memory efficient as strategy 0.
- '2': In addition to '1', also substitute variables that are true or false into an already generated right hand sides. This can mean that certain variables become unreachable (e.g. X0 in X0 && X1,when X1 becomes false, assuming X0 does not occur elsewhere. It will be maintained which variables have become unreachable as these do not have to be investigated. Depending on the PBES, this can reduce the size of the generated BES substantially, but requires a larger memory footstamp.
- '3': In addition to '2', investigate for generated variables whether they occur on a loop, such that they can be set to true or false, depending on the fixed point symbol. This can increase the time needed to generate an equation substantially.
- -t --tree
- store state in a tree (for memory efficiency, comes with a small performance penalty)
- -u --unused-data
- do not remove unused parts of the data specification
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Known issues
The counter example generated when the approximation algorithm of boolean equations is being used is in general huge and not very helpful. This algorithm is always employed with strategies 0 and 1. With strategies 2 and 3 it can be that when generating the boolean equation system from a PBES, it is already detected that the initial instantiated variable is either true or false and the approximation algorithm is not necessary. Counter examples in this case are compact (although we have no proof that the counter examples are always optimal) and also very helpful.
Detailed description
Generation of a BES
A BES is generated as follows. First the initial instantiated variable is considered. The instantiated right hand side for this variable is calculated, where all expressions without PBES variables are eliminated. Expressions are reduced to true or false and quantifiers are eliminated by enumerating its elements. As an example consider the PBES (where we use natural numbers as parameters, but these could be different of course).
pbes mu X(n:Nat)=(n<5)||(forall m:Nat.(m<=n+1) => X(m)); init X(0);
The initial instantiated variable is X(0). The right hand side belonging to X(0) is
(0<5)||(forall m:Nat.(m<=0+1) => X(m))
which using rewriting reduces to:
(forall m:Nat.(m<=1) => X(m))
The variable m can either be 0 or 1. Using that natural numbers are defined by constructors, a technique called narrowing is used, using which it is calculated that 0 and 1 are the only useful values for m. The expression reduces to:
X(0) && X(1)
So, the first boolean equation that results is
mu X(0)=X(0) && X(1)
The next step is to calculate the equation for X(1).
Strategies
There are different strategies to generate the equations. In strategy 0, all equations are generated in a breadth first search. The equations generated in the order the instantiated variables are encountered.
In strategy 1, a small improvement is made. If an equation of the form
nu X(17)=(X(10) && X(18)) || X(19)
is encountered and the right hand side for X(10) is false, then by substitution false for X(10) the equation reduces to
nu X(17)=X(19)
Note that the instantiated variable X(18) disappears. It can be that X(18) does not have to be investigated at all, saving work compared to strategy 0.
The idea of substituting true and false and avoiding unnecessary work is taken one step further in strategy 2. Here, whenever a right hand side of an instantiated bes variable is true or false, this value is substituted for the instantiated variable every where. The advantage of strategy 2 is that when the validity of a modal formula can be detected by only investigating parts of the state space, this is detected. The costs of strategy 2 is a higher memory footprint than for strategy 0 and 1.
Consider the following partially generated BES from some PBES, which typically is the result of a deadlock check on a transition system with a deadlock.
nu X(0)=X(1) && X(2) && X(3) nu X(1)=X(4) && X(5) nu X(2)=X(6) nu X(3)=false
With strategy 2, the value for X(3) will be substituted. The result is that X(0) becomes false. Furthermore, the instantiated variables X(1) and X(2) cannot be reached and have become superfluous. Using strategy 2, a garbage collection algorithm prevents such variables from being investigated.
Strategy 3 is very comparable to strategy 2, except that when a dependency loop of instantiated variables is detected, it attempts to set all the variables in the loop to true in case the fixpoint symbol is a nu, or false if it is a mu. For example
nu X(38)=X(39) nu X(39)=X(38)
it can set both X(38) and X(39) to true. Moreover, following strategy 2, it can subsequently substitute true for X(38) and X(39) in the generated equations.
Solving a BES
After the BES is generated, it can be solved. For this a backward approximation technique is followed. First all instantiated BES variables of the highest alternation depth are calculated. The variables are all simultaneously set to true or false depending on the fixpoint symbol at this depth. By a normal fixpoint iteration, a stable solution is calculated. This process must be symbolic, as variables at lower alternation depths can still occur in the approximation.
The results of this approximation are substituted in all equations of lower alternation depth, just as in Gauss-elimination. In a sense this is the ordinary Gauss elimination process, except that it treats all variables at the same alternation depth at once. For instance when the alternation depth is 0, i.e. there is no alternation, this approximation process converges in linear time. For arbitrary nesting depths, this procedure is exponential.
Generation of counter examples
It is possible to let pbes2bool generate a counter example. As it stands, counterexamples are most useful when generated with strategy 2. A counterexample is a tree with the initial instantiated pbes variable as its root. The branches of each node are printed as lines with two extra spaces of indentation. These branches are labelled with instantiated pbes variables of which the value determined the value of our node. Typically a counter example looks like:
Solving the BES with 10 equations. The pbes is not valid Below the justification for this outcome is listed 1: X(0) 2: Subst:false X(2) 4: Subst:false X(5) 3: Subst:false X(9)
This says that when solving X(0), it could be determined that it had solution false, because X(2) and X(9) where also false. The instantiated variable X(2) was false because X(5) was false. Apparently, X(5) and X(9) where invalid by itself.
The phrase Subst:false indicates the reason why a substitution was made. The following indications exist:
- Mu Cycle
- the variable is set to false because it is part of a cycle in a class of variables that all have the same alternation depth, and are preceded by a mu (strategy 3).
- Nu Cycle
- as in a Mu Cycle, except that the variable is set to true and the variables are preceded by nu (strategy 3).
- Subst:false
- false is substituted using back or forward substitution (strategy 2).
- Subst:true
- the value true is substituted using back or forward substitution (strategy 2).
- FSubst:false
- the value false is substituted by forward substition (strategy 1).
- FSubst:true
- the value true is substituted by backward substitution (strategy 1).
- Set:false
- variable is set to false (currently not used).
- Set:true
- variable is set to true (currently not used).
- Appr:false
- false is substitued for the variable when solving it using approximation.
- Appr:true
- true is substituted for the variable when solving it using approximation.
- Approxim
- a value not equal to true or false is substituted when solving the BES using approximation.
Sometimes the counterexample is recursive, or has re-occuring parts. these parts are only given once in the counterexample. A * at the end of a line in the counterexample indicates that this instantiated variable did already occur earlier in the counterexample and therefore, the reasons why it is true or false are not printed again.
Author
Written by Jan Friso Groote.
Bug reporting
Report bugs at our issue tracking system.
pbesconstelm
Synopsis
pbesconstelm[OPTION]... [INFILE [OUTFILE]]
Short Description
Reads a file containing a PBES, and applies constant parameter elimination to it. If OUTFILE is not present, standard output is used. If INFILE is not present, standard input is used.
Options
OPTION can be any of the following:
- -c, --compute-conditions
- compute propagation conditions
- -p[NAME], --pbes-rewriter[=NAME]
- use pbes rewrite strategy NAME:
'simplify' for simplification 'quantifier-all' for eliminating all quantifiers 'quantifier-finite' for eliminating finite quantifier variables 'pfnf' for rewriting into PFNF normal form
- -e, --remove-equations
- remove redundant equations
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Simon Janssen and Tim Willemse.
Reporting bugs
Report bugs at [12].
pbesinfo
Synopsis
pbesinfo[OPTION]... [INFILE]
Short Description
Print basic information about the PBES in INFILE. If INFILE is not present, standard input is used.
By default, the following information about the PBES is shown:
- information if the PBES is closed and well-formed;
- number of equations, μs and νs.
Options
OPTION can be any of the following:
- -f, --full
- display the predicate variables and their signature
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Alexander van Dam.
Reporting bugs
Report bugs at [13].
pbesparelm
Synopsis
pbesparelm[OPTION]... [INFILE [OUTFILE]]
Short Description
Reads a file containing a PBES, and applies parameter elimination to it. If OUTFILE is not present, standard output is used. If INFILE is not present, standard input is used.
Options
OPTION can be any of the following:
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink, with contributions from Simon Janssen and Tim Willemse.
Reporting bugs
Report bugs at [14].
pbespp
Pretty print a PBES.
Synopsis
pbespp [OPTION]... [INFILE [OUTFILE]]
Short description
The pbespp tool prints the parameterised boolean equation system (PBES) from INFILE to OUTFILE in a human readable format. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
Options
OPTION can be any of the following:
- -fFORMAT, --format=FORMAT
- print the PBES in the specified FORMAT:
- default: for a PBES specification (default)
- debug: like default, with the following exceptions:
- data expressions are printed in prefix notation using identifiers from the internal format
- each data equation is put in a separate data equation section
- internal: for a textual ATerm representation of the internal format
- internal-debug: like internal, with an indented layout
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Aad Mathijssen.
Bug reporting
Report bugs at our issue tracking system.
pbesrewr
Synopsis
pbesrewr[OPTION]... [INFILE [OUTFILE]]
Short Description
Rewrite the PBES in INFILE, remove quantified variables and write the resulting PBES to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
Options
OPTION can be any of the following:
- -p[NAME], --pbes-rewriter[=NAME]
- use pbes rewrite strategy NAME:
'simplify' for simplification 'quantifier-all' for eliminating all quantifiers 'quantifier-finite' for eliminating finite quantifier variables 'pfnf' for rewriting into PFNF normal form
- -rNAME, --rewriter=NAME
- use rewrite strategy NAME:
'jitty' for jitty rewriting (default), 'jittyp' for jitty rewriting with prover, 'jittyc' for compiled jitty rewriting, 'inner' for innermost rewriting, 'innerp' for innermost rewriting with prover, or 'innerc' for compiled innermost rewriting
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Jan Friso Groote and Wieger Wesselink.
Reporting bugs
Report bugs at [15].
pnml2mcrl2
Convert a Petri net to an mCRL2 process specification.
Synopsis
pnml2mcrl2 [OPTION]... [INFILE [OUTFILE]]
Short description
The pnml2mcrl2 tool converts a Petri net in EPNML format to a matching mCRL2 specification. It does so without looking into the structure of the Petri net. Instead, it translates each place, transition and arc to (one or more) processes and/or variables, corresponding to that place, transition or arc.
Only classical Petri nets are translated, i.e. places, transitions and arcs. Other constructs, such as timing, coloring, inhibitor arcs and hierarchy will simply be ignored while translating.
Options
OPTION can be any of the following:
- -e[NUM], --error[=NUM]
- an __error action will happen if a place gets NUM or more tokens (default is 2)
- -i, --hide
- hide (rename to tau) all transition monitoring actions to hide all but one action edit the generated file and remove that action from the hide list
- -p, --no-rec-par
- generate non-recursive mCRL2 processes for the places, and enable the translation of inhibitor arcs and reset arcs
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display concise intermediate messages
- -d, --debug
- displays detailed intermediate messages
- -h, --help
- display help message
- --version
- display version information
Authors
Written by Johfra Kamphuis and Yaroslav S. Usenko.
Bug reporting
Please report bugs at out issue tracking system.
squadt
Interactive integration of software tools
Synopsis
squadt [OPTION]... [PATH]
Short description
By default SQuADT starts and draws the graphical user interface, after which it waits for user interaction. Alternatively, when PATH is provided, it tries to open an existing project in PATH.
Options
OPTION can be any of the following:
- -c, --create
- create new project in PATH
- -pPORT, --port=PORT
- listen on TCP port number PORT
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help message
- --version
- display version information
Detailed description
Overview
The SQuADT application provides a framework for tool integration. In the current version it is only possible to run tools that are present on the same machine that SQuADT is running on. The current setup does just this but in the future it should not matter on what machine the tools are running, as long as a tool can be started and can connect to SQuADT.
A custom build protocol based on XML-formatted messages is used for communication between tools and the SQuADT application across a TCP connection. This should allow almost any tool written in almost any programming language to connect and operate within this framework.
Projects
All operations occur within a project context, which is used by the system to collect and store information that can be used to automate certain tasks for the user. Creation of a new project consists of choosing a separate directory called project store. Associated with the project are all files that are assigned to it by the user or that are generated as part of tool operation.
The SQuADT application manages the contents of the project store. Files added to a project by the user are copied to this directory and erased when they are removed from the project. As part of the protocol the tool communicates what files have been used as input and what files have been produced during a tool run. The next section that discusses the data view tells how files can become part of a project.
Graphical User Interface
The main screen is split into two views, a view on the data in the project, and an activity view.
Data view
The data view shows sources of data and their main interdependencies. Below is a screenshot that shows the data view in SQuADT. Every icon represents a source of data, meaning a single file in the store. The colours indicate status. For instance a tool can be actively generating a file, or data in a file can be corrupted because a tool crashed while it was generating the data. To give the user a clue as to what is happening and what has happened the status is interactively updated while tools run in the background.
It is important to realise that the view only displays files in the project store that have been added to the project by the user, or files that can be created by running tools on other files in the project. Copying files to and from the project store has no effect, the system will ignore them or a tool may overwrite them if file names collide. Also note that not every object in the data view needs to actually correspond to a file in the project store. The data view (partly) visualises dependencies among data sources. It shows that the system `knows' what tools it must apply to what input in order to obtain each data object. The colours in the data view should be interpreted as follows:
-
- file contents is authentic (added by the user), so it is always up-to-date
-
- file contents is derived from other data and up-to-date
-
- file contents is derived from other data, present in the project store but not up-to-date with respect to the data sources it depends on
-
- file contents is derived from other data and is not available in the project store or is considered corrupt
-
- file contents is being generated
As hinted at before here are two ways in which a file can become part of a project. The first is when a user manually adds it to a project. These files are called original or authentic because once lost they cannot be recreated without user intervention. Adding an original file is performed by selecting the appropriate option in the `Project' menu, as illustrated below.
The second way that files become part of a project is when they are produced by running a tool from the project store. The tool may require input from other files in the project. Such files are called the (input) dependencies. It is assumed that SQuADT is aware of all input dependencies in a project and one of its tasks is to make sure that all non-authentic files are up-to-date with respect to the files on which they depend (recursively). This means that changes propagate inversely across dependencies.
Note that there is an important restriction with regard to interfile dependencies. A tool may not depend for input on it's own output, or any file derived from it. Or equivalently cycles are not allowed in the dependency graph. The consequence is that there is only one way to generate each derived data source. This ensures that if all tools can process input and produce output in a finite amount of time, then all files in a project can be reproduced from the authentic files in a finite amount of time as well.
The data view is not just a passive visualisation of data in the project store. In addition it also functions as an interface for managing the project store. The following picture shows the operations that can be performed on a single file.
The context menu can be obtained by activating (right/double clicking) the object in the data view. From top to bottom. Rename can be used to edit the name of an object (and the associated file). Remove deletes the object and every object that depends on it (transitive-closure). Refresh brings the object and all objects it depends on in up-to-date status (transitive-closure). Configure starts a tool and reconfigures the tool that was used to generate the object. Clean removes the associated file from the project store, but retains the information on how it can be produced by running tools. The menu options between the separators are categories that characterise functionality of the set of known tools that take as (main) input a file with a type that corresponds with the type of the selected object. Finally the menu-option details shows a dialog that contains details on how the file was created (or how it can be recreated).
Activity view
The activity view shows activity of running tools as well as tools that might have already finished. Each tool instance is associated to a sub-window in the activity view associated. Such a window is called a `tool display' and is hidden by default. The tool display is not visible unless a tool activates it in some way.
The tool display represents a specific task that is being performed or has been performed. The task is performed by a single tool that is running in the background or has terminated already. Using the tool display the user can configure the tool to perform a task or see task progress information. The tool display is a communication channel between a tool instance and the user. For richer user-interaction the tool can also communicate with a user through its own graphical user interface.
Editing
Files can be manipulated by all kinds of tools that connected to SQuADT. An important class of useful tools namely editors are not available. To still be able to use such tools it is possible to invoke custom edit action on any file in a project. The inner workings are as follows. A command that performs the desired operation is associated with a file type. The command is executed in the default shell when the edit action is invoked.
The preferences menu gives access to the list of type/command associations. The list contains the types that are known to SQuADT after it's initialisation. The types are gathered by querying known tools. If initialisation fails for some tools then some types may not be in the list. It is possible to manually add a type/command pair, or to edit existing pairs. As an example the following command can be used to pretty print an mCRL2 linear process specification (LPS) and view the result in the editor vim.
/bin/sh -c '/usr/bin/lpspp $ | /usr/bin/gvim -'
The command looks very complex for technical reasons, the goal is actually to execute '/usr/bin/lpspp $ | /usr/bin/gvim'. The shell (/bin/sh) is used to set up communication channels between the lpspp and programs gvim. Notice that the $ will be replaced by the target of the edit operation. For a file abp.lps, the result will look as follows:
/bin/sh -c '/usr/bin/lpspp abp.lps | /usr/bin/gvim -'
For this mechanism to work as expected it is very important that the type of a file is known to SQuADT. This should be the case for any file generated by a tool. In this case the type is communicated as part of the message that a tool sends to inform SQuADT about the existence of the file. Of course a tool may communicate a bogus type and SQuADT will never know about it (considered a bug in the tool). For files added to a project by the user the type is guessed from the name of the file.
Author
Written by Jeroen van der Wulp.
Bug reporting
Report bugs at our issue tracking system.
tbf2lps
Convert a μCRL LPE to an mCRL2 LPS.
Synopsis
tbf2lps [OPTION]... [INFILE [OUTFILE]]
Short description
The tbf2lps tool translates linear process equations (LPEs) from the μCRL format (.tbf) to the mCRL2 format (.lps).
This translation assumes that Bool is the boolean sort with constructors T and F. Additionally, the following conversions on the data specification will be applied:
- the constructors T and T of sort Bool are replaced by true and false;
- function and is replaced by &&;
- equality functions eq are replaced by ==.
The conversions of and and eq are not necessary, but allow for elimination of sum variables (which can significantly speed up state space generation).
Options
OPTION can be any of the following:
- -n, --no-conv-maps
- do not apply conversions of mappings and and eq
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display concise intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help message
- --version
- display version information
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
tracepp
Convert and pretty print traces.
Synopsis
tracepp [OPTION]... [INFILE [OUTFILE]]
Short description
The tracepp tool converts the trace from INFILE to OUTFILE in another (possibly human readable) format. If OUTFILE is not present, stdout is used. If INFILE is not present, stdin is used.
Input should be in either plain format, which means a text file with one action on each line, or the mCRL2 trace format (as generated by lps2lts, for example).
Options
OPTION can be any of the following:
- -fFORMAT, --format=FORMAT
- print the trace in the specified FORMAT:
- plain for plain text (default)
- mcrl2 for the mCRL2 format
- aut for the Aldebaran format
- dot for the GraphViz format
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Written by Muck van Weerdenburg.
Bug reporting
Report bugs at our issue tracking system.
txt2lps
Synopsis
txt2lps[OPTION]... [INFILE [OUTFILE]]
Short Description
Translates the mCRL2 specification in INFILE and writes the resulting LPS to OUTFILE. If OUTFILE is not present, standard output is used. If INFILE is not present, standard input is used.
Options
OPTION can be any of the following:
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Wieger Wesselink.
Reporting bugs
Report bugs at [16].
txt2pbes
Synopsis
txt2pbes[OPTION]... [INFILE [OUTFILE]]
Short Description
Parse the textual description of a PBES from INFILE and write it to OUTFILE. If INFILE is not present, stdin is used. If OUTFILE is not present, stdout is used.
The textual description should adhere to the BNF syntax description at <http://www.mcrl2.org/mcrl2/wiki/index.php/Language_reference/PBES_syntax>.
The textual description should adhere to the following BNF syntax description.
Options
OPTION can be any of the following:
- --timings[=FILE]
- append timing measurements to FILE. Measurements are written to standard
error if no FILE is provided
Standard options:
- -q, --quiet
- do not display warning messages
- -v, --verbose
- display short intermediate messages
- -d, --debug
- display detailed intermediate messages
- -h, --help
- display help information
- --version
- display version information
Author
Implemented by Aad Mathijssen.
Reporting bugs
Report bugs at [17].
FAQ
Tools
Odd crashes on linux
On linux it is advised to set the stacksize to unlimited. This can be done by using a command limit stacksize unlimited. If the stack is limited tools will crash without warning when the stack is full.
mcrl22lps: Linearising an untimed mCRL2 file yields an LPS with time
This issue is caused by the use of the conditional operator c -> p. The default semantics of this operator is c -> p <> delta@0, which introduces time by means of the time stamp 0. When a specification does not contain time, it usually is more sensible to use the alternative semantics c -> p <> delta, that is without the introduction of a time stamp. To use this alternative semantics, the command line option -D/--delta may be used (or you can manually append <> delta to all expressions of the form c -> p).
mcrl22lps: Linearising takes excessively long
There are many potential reasons. First of all, the data equations -- that are considered as rewrite rules (from left to right) -- may not be terminating. Solution is to use the -o/--no-rewrite flag. A second reason can be that removing delta summands is too costly. This is avoided by using the -D/--delta option, which also eliminates timed delta summands. It is also possible that sum elimination is too costly, avoid this using the -m/--no-sumelm flag. The generation of large enumerated data types can also be expensive, which is avoided using the option -b/--binary (this encodes finite datatypes using booleans). Finally, it can be that the translation to regular form is very time consuming. Try to use -lstack/--lin-method=stack option instead of the default -1regular/--lin-method=regular. Also, the use of -lregular2/--lin-method=regular2 results in mcrl22lps terminating more often than the default.
LPS tools: "Cannot enumerate Real" error but no Reals are being used
This issue is most likely caused by the fact that linearisation of an untimed mCRL2 file yielded an LPS with time.
LPS tools: Performing tool operations on an LPS created by tbf2lps fails with an assertion
Currently tbf2lps does not check whether invalid identifiers are inserted into an LPS. Therefore, some tools may fail, as they render an LPS invalid because of this. This issue has at least been seen in lpsactionrename.
lpspp: Can I pass the output of lpspp to mcrl22lps?
Until svn revision 6655, mcrl22lps was not able to read linear process specifications that were pretty printed by lpspp, when the proc or init sections of the resulting specification contained free variable declarations denoted by var. This problem could be circumvented by running mcrl22lps with the -f/--no-freevars option, but it was not recommended when running other LPS tools. As of revision 6656, mcrl22lps is able to handle global variables, which replace the notion of free variables.
LTS tools do not work on very large SVC files
When using lps2lts the default mCRL2 (SVC-based) format can only be used when storing state spaces that fit into 4GiB. Files containing state spaces larger than that become unusable by any of the tools.
SQuADT: some tools are missing in the interface
When SQuADT is executed for the first time, it tries to find the required tools. If they cannot be found automatically, a pop-up appears which asks a user to guide SQuADT to the tools, by selecting a required one.
When tools are missing in SQuADT, please remove the .squadt/tool_catalog file in your "home" directory and restart SQuADT.
- On Linux/Unix: $HOME/.squadt/tool_catalog
- On Windows XP: C:\Documents and Settings\user\.squadt\tool_catalog
- On Mac OS X: /Users/user/.squadt/tool_catalog
Prior to the installation of a new version of the toolset, we advise users to remove .squadt directory.
SQuADT: Windows asks to unblock SQuADT in the firewall
SQuADT internally uses socket communication to connect to the specific mCRL2 tools. This causes the Windows firewall to ask to unblock SQuADT. By default SQuADT will only connect to localhost (127.0.0.1), and will never connect to the internet. Failing to unblock SQuADT in the firewall may lead to malfunction.
SQuADT: ltsgraph, ltsview and diagraphica crash when started from SQuADT
It is currently known that ltsgraph, ltsview and diagraphica crash when they are started from SQuADT in Windows Vista and Windows 7. A proper fix for this is currently not available. To work around this issue you can manually start the tools (from the start menu -> mCRL2 -> { ltsgraph, ltsview, diagraphica }), and manually open the file you want to display.
SQuADT
SQuADT is an alpha-tool, that may display inconsistent behavior. This may result in wrong user feedback, e.g. wrongful coloring of files, no feedback when tools are started or exit unexpectedly. Known issues are listed here.
Installation
After `svn update' the toolset no longer builds
Sometimes changes to the build system that are imported when running svn update cause build failures. Some different causes:
- accidental committed mistakes
- targets from different build configurations (e.g. x86 vs. x86-x64, Release vs. Debug) reside in same build tree
- configuration has changed
When the configure has changed, CMake should automatically trigger a new configuration. It is possible to trigger it manually by executing `cmake ." from the build-tree. If the problem persists, it is possible to remove the build target by executing `make clean'. This will preserve the current configuration. As a last resort it is possible to create a new build tree. This will require you to configure the build tree from scratch.
Linux: Visualization tools do not work properly
OpenGL tools do not work properly on X servers that use a Composite window manager (like Compiz or Beryl). Unfortunately this is a widespread issue that affects all OpenGL applications in general, not just the mCRL2 tools. We know of no workaround for this problem other than disabling your Composite window manager.
Linux: Diagraphica crashes with a segmentation fault at startup
With ATI cards diagraphica can terminate with a segmentation fault during initialization. Possible solutions:
- Set the LD_PRELOAD environment variable to libGL.so.1.2 which is usually located in /usr/lib/. Depending on your shell you can start diagraphica with the following command:
LD_PRELOAD=/usr/lib/libGL.so.1.2 diagraphica
or bysetenv LD_PRELOAD /usr/lib/libGL.so.1.2
diagraphica
Note: Setting LD_PRELOAD may cause instability to other programs - On Novel/SuSE-10.2-IA32: Install the proprietary ATI drivers via YaST.
- Start "YaST Control Center" → "Software" → "Installation Source" → "Add source".
- Use the following configuration:
- Protocol: HTTP
- Server Name: www2.ati.com
- Directory and Server: /SuSE/10.2
- After the source has been added, go to "YaST Control Center" → "Software" → "Software Managment".
- Depending on the flavour of your kernel install the following packages:
- ati-fglrxG01-kmp-default-<kernel-version>
- x11-video-fglrxG01
- where <kernel-version> can be determined using: uname -r.
- After installing, go to runlevel 3 ("#init 3") and start sax2 using: sax2 -r.
- Test and save your configuration and restart your X-server.
- Set the LD_PRELOAD environment variable to libGL.so.1.2 which is usually located in /usr/lib/. Depending on your shell you can start diagraphica with the following command:
Language
Support for quantifiers
As it stands, the implementation of quantifiers (exists and forall) in the language is not very advanced. This means that they can be used, but in general, simulating an mCRL2 model, or generating a state space for an mCRL2 model with quantifiers will most likely not succeed.
Support for Reals
The implementation of reals is currently the same as the implementation of integers, which explains the current lack of specific operators on reals.
Support for sets and bags
Sets over sort A are internally represented using functions of sort A -> Bool, and bags are represented by functions of sort A -> Nat. Currently, sets and bags are not normalized, meaning that two equal sets can have different denotations. For instance the empty set {} and the empty set to which an element is added that is subsequently removed again are not syntactically the same objects in memory. This means that sets and bags are suitable for simulation of processes, but as it stands not yet suited for state space generation. For state space generation it is generally better to use lists.
Known compilation issues
LTSview will produce a segmentation fault when loading a file if being compiled with MSVC9. Compiling LTSview with either MinGW or MSVC10 resolves the segmentation fault.
Copyright © 2005-2012 Technische Universiteit Eindhoven.







