<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://prob.hhu.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daniel+Plagge</id>
	<title>ProB Documentation - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://prob.hhu.de/w/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Daniel+Plagge"/>
	<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Special:Contributions/Daniel_Plagge"/>
	<updated>2026-05-27T08:18:52Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=The_ProB_Animator_and_Model_Checker&amp;diff=2201</id>
		<title>The ProB Animator and Model Checker</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=The_ProB_Animator_and_Model_Checker&amp;diff=2201"/>
		<updated>2014-06-03T20:00:58Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Added link to theory page in news&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{| cellpadding=&amp;quot;5&amp;quot;&lt;br /&gt;
|-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
|width=&amp;quot;60%&amp;quot;|ProB is an animator and model checker for the [http://en.wikipedia.org/wiki/B-Method B-Method] (see the [http://www.clearsy.com/en/our-specific-know-how/b-method/?lang=en B-Method site of Clearsy]). It allows fully automatic animation of many B specifications, and can be used to systematically check a specification for range of errors. The constraint-solving capabilities of ProB can also be used for model finding, deadlock checking and test-case generation.&lt;br /&gt;
&lt;br /&gt;
In addition to B, ProB now also supports [http://www.event-b.org/ Event-B], [http://en.wikipedia.org/wiki/Communicating_sequential_processes CSP-M],&lt;br /&gt;
[http://research.microsoft.com/en-us/um/people/lamport/tla/tla.html TLA+], and [http://en.wikipedia.org/wiki/Z_notation Z]. ProB can be installed within [http://sourceforge.net/projects/rodin-b-sharp/ Rodin], where it comes with [http://www.stups.uni-duesseldorf.de/BMotionStudio/ BMotionStudio] to easily generate domain specific graphical visualizations.&lt;br /&gt;
&lt;br /&gt;
ProB is now being used within Siemens, Alstom, and several other companies for [http://www.data-validation.fr data validation] of complicated properties. Commercial support is provided by the spin-off company [http://www.formalmind.com Formal Mind].&lt;br /&gt;
&lt;br /&gt;
Part of the research and development was conducted within the [http://www.epsrc.ac.uk/default.htm EPSRC] funded projects [http://users.ecs.soton.ac.uk/phh/abcd/ ABCD] and [http://users.ecs.soton.ac.uk/mal/ISM.html iMoc], and within the EU funded project [http://rodin.cs.ncl.ac.uk/ Rodin]. Development is continued under the EU funded projects [http://www.deploy-project.eu/ Deploy] and [http://www.advance-ict.eu/ Advance] as well as the [http://www.dfg.de/ DFG] project [http://www.gepavas.de/ Gepavas]. &lt;br /&gt;
&lt;br /&gt;
Automatically generated test [http://nightly.cobra.cs.uni-duesseldorf.de/coverage/html/ coverage reports are available].&lt;br /&gt;
&lt;br /&gt;
|width=&amp;quot;40%&amp;quot; style=&amp;quot;background:#EDF2F2;&amp;quot; | &#039;&#039;&#039;News&#039;&#039;&#039;&lt;br /&gt;
&#039;&#039;&#039;3/6/2014&#039;&#039;&#039;&lt;br /&gt;
ProB supports [[Event-B Theories]]. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;4/3/2013&#039;&#039;&#039;&lt;br /&gt;
[[Download|ProB 1.3.6]] is available. Highlights: improved constraint propagation for division, modulo, intervals, model checking progress bar, performance improvements, improved Kodkod backend and use within REPL, and many more.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;8/10/2012&#039;&#039;&#039;&lt;br /&gt;
[[Download|ProB 1.3.5]] is available. Highlights: support for external and recursive functions, optional Kodkod backend, TLA+ support, performance improvements, pragmas, units inference, and many more.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;30/03/2012&#039;&#039;&#039;&lt;br /&gt;
A first prototype of an online [[ProB_Logic_Calculator|ProB Logic Calculator]] is available.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;21/11/2011&#039;&#039;&#039;&lt;br /&gt;
ProB 1.3.4 is available. Highlights: Evaluation View and Eval window, CSP assertion checking, improved editor, 64-bit version for Mac and Linux, performance improvements, and many more.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039; &#039;&#039;&#039;&lt;br /&gt;
[[Download#Short Release History|More in Release History]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Implementation ==&lt;br /&gt;
The core of ProB is implemented in [http://www.sics.se/isl/sicstuswww/site/index.html SICStus Prolog] (but can be run without a SICStus Prolog license). The ProB constraint solver is implemented using co-routining and the CLP(FD) finite domain library of SICStus. An alternate [[Using_ProB_with_KODKOD | constraint solver based on Kodkod (and thus SAT)]] is also available within ProB, as is an alternate [[TLC|model checking engine (TLC)]] for low-level B specifications. The [[ProBLicence | ProB Licence can be found here]].&lt;br /&gt;
&lt;br /&gt;
== Features ==&lt;br /&gt;
ProB covers a [[Summary of B Syntax|large part of B]], and we are striving towards full coverage of Atelier B and B4Free constructs. ProB supports B features such as non-deterministic operations, ANY statements, operations with complex arguments, sets, sequences, functions, lambda abstractions, set comprehensions, records, constants and properties, and many more. Not supported are the Atelier B tree operations and there are restrictions on DEFINITIONS. ProB does support multiple machines, refinements, and implementations. ProB can also be used for automated refinement checking and [[LTL Model Checking|LTL model checking]]. It also [[CSP-M|supports almost full CSP-M]] process descriptions (as of version 1.2.7), to be used on their own or to guide B machines for specification and property validation. The state space of the specifications can be [[Graphical Viewer|graphically visualized]]. &lt;br /&gt;
ProB also supports Z specifications (ProB in this context is sometimes called [[ProZ]]) as well as [[TLA|TLA+ specifications]]. We now also have an online [[ProB Logic Calculator]].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Template:User_Manual_Index&amp;diff=2200</id>
		<title>Template:User Manual Index</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Template:User_Manual_Index&amp;diff=2200"/>
		<updated>2014-06-03T19:58:24Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Installation]]&lt;br /&gt;
* [[Current Limitations]]&lt;br /&gt;
* [[General Presentation (tcl/tk)]]&lt;br /&gt;
* [[Graphical Viewer]]&lt;br /&gt;
* [[Graphical Visualization]]&lt;br /&gt;
* [[State Space Visualization]]&lt;br /&gt;
* [[Consistency Checking]]&lt;br /&gt;
* [[Constraint Based Checking]]&lt;br /&gt;
* [[Refinement Checking]]&lt;br /&gt;
* [[LTL Model Checking]]&lt;br /&gt;
* [[Using ProB with Atelier B]]&lt;br /&gt;
* [[CSP-M|Using CSP-M in ProB]]&lt;br /&gt;
* [[Event-B Theories|Using ProB for Event-B with the theory plug-in]]&lt;br /&gt;
* [[ProZ|Using ProZ for Animation and Model Checking of Z Specifications]]&lt;br /&gt;
* [[TLA|Using ProB for TLA Specifications]]&lt;br /&gt;
* [[TLC|Using TLC for B Specifications]]&lt;br /&gt;
* [[Other languages|Using ProB with Promela and other languages]]&lt;br /&gt;
* [[Symmetry Reduction]]&lt;br /&gt;
* [[Recursively Defined Functions]]&lt;br /&gt;
* [[External Functions]]&lt;br /&gt;
* [[Test Case Generation]]&lt;br /&gt;
* [[Using ProB with KODKOD]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
* [[Tips: Writing Models for ProB]]&lt;br /&gt;
* [[Using the Command-Line Version of ProB]]&lt;br /&gt;
* [[Summary of B Syntax]]&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2199</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2199"/>
		<updated>2014-06-03T19:57:21Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Tagging operators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
The project contains the following theories:&lt;br /&gt;
; SUMandPRODUCT&lt;br /&gt;
: Contains two operators SUM and PRODUCT which take a set of the type POW(T**INT) as argument (with T being a type variable) and return the sum (resp.) product of all element&#039;s integer value. &lt;br /&gt;
The operators are annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Seq&lt;br /&gt;
: The theory of sequences provides operators for sequences that are defined by direct definitions, thus supported by ProB.&lt;br /&gt;
; Real (unsupported)&lt;br /&gt;
: A theory of real numbers, currently unsupported by ProB.&lt;br /&gt;
; Natural&lt;br /&gt;
: A theory of inductive naturals (defined by a constant zero and a successor function).&lt;br /&gt;
The mkinat operator is annotated such that ProB uses an explicit implementation.&lt;br /&gt;
; List&lt;br /&gt;
: A theory of lists that are either empty or have a head and a tail&lt;br /&gt;
; FixPoint (not really supported)&lt;br /&gt;
: The theory is defined by direct definitions but they usually get so complex that ProB cannot cope with them.&lt;br /&gt;
; closure&lt;br /&gt;
: The operator for transitive closures is supported by ProB.&lt;br /&gt;
The operator is annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Card (contains no operators or data types)&lt;br /&gt;
: Contains theorem about set cardinalities.&lt;br /&gt;
; BoolOps&lt;br /&gt;
: Operators on Booleans (e.g. AND, OR) are defined by direct definitions and as such supported by ProB.&lt;br /&gt;
; BinaryTree&lt;br /&gt;
: Binary Trees are supported by ProB.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;div style=&amp;quot;background-color:yellow;border-width:thin;border-style:dashed;padding:5pt&amp;quot;&amp;gt;&#039;&#039;&#039;Please note:&#039;&#039;&#039; The use of these tags is for experts only. Normally such annotations are delivered with a theory. If you think ProB should provide specific support for a theory, please contact us.&lt;br /&gt;
&amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported (with T being an arbitrary type):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Tag      || Description                                                || Expected type || Return type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure                                     || POW(T**T)     || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set                                           || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set                                       || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| mu       || returns the element of a singleton set                     || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| choose   || returns (deterministically) one element of a non-emtpy set || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(zero,succ) || returns an inductive natural number where zero and succ are the two operators of a natural number datatype with zero having no args and succ having one arg (an inductive natural)  || INT          || Inductive Nat&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2198</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2198"/>
		<updated>2014-06-03T19:52:19Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Tagging operators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
The project contains the following theories:&lt;br /&gt;
; SUMandPRODUCT&lt;br /&gt;
: Contains two operators SUM and PRODUCT which take a set of the type POW(T**INT) as argument (with T being a type variable) and return the sum (resp.) product of all element&#039;s integer value. &lt;br /&gt;
The operators are annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Seq&lt;br /&gt;
: The theory of sequences provides operators for sequences that are defined by direct definitions, thus supported by ProB.&lt;br /&gt;
; Real (unsupported)&lt;br /&gt;
: A theory of real numbers, currently unsupported by ProB.&lt;br /&gt;
; Natural&lt;br /&gt;
: A theory of inductive naturals (defined by a constant zero and a successor function).&lt;br /&gt;
The mkinat operator is annotated such that ProB uses an explicit implementation.&lt;br /&gt;
; List&lt;br /&gt;
: A theory of lists that are either empty or have a head and a tail&lt;br /&gt;
; FixPoint (not really supported)&lt;br /&gt;
: The theory is defined by direct definitions but they usually get so complex that ProB cannot cope with them.&lt;br /&gt;
; closure&lt;br /&gt;
: The operator for transitive closures is supported by ProB.&lt;br /&gt;
The operator is annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Card (contains no operators or data types)&lt;br /&gt;
: Contains theorem about set cardinalities.&lt;br /&gt;
; BoolOps&lt;br /&gt;
: Operators on Booleans (e.g. AND, OR) are defined by direct definitions and as such supported by ProB.&lt;br /&gt;
; BinaryTree&lt;br /&gt;
: Binary Trees are supported by ProB.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; The use of these tags is for experts only. Normally such annotations are delivered with a theory. If you think ProB should provide specific support for a theory, please contact us.&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported (with T being an arbitrary type):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot; &lt;br /&gt;
! Tag      || Description                                                || Expected type || Return type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure                                     || POW(T**T)     || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set                                           || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set                                       || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| mu       || returns the element of a singleton set                     || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| choose   || returns (deterministically) one element of a non-emtpy set || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(zero,succ) || returns an inductive natural number where zero and succ are the two operators of a natural number datatype with zero having no args and succ having one arg (an inductive natural)  || INT          || Inductive Nat&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2197</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2197"/>
		<updated>2014-06-03T19:41:56Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Tagging operators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
The project contains the following theories:&lt;br /&gt;
; SUMandPRODUCT&lt;br /&gt;
: Contains two operators SUM and PRODUCT which take a set of the type POW(T**INT) as argument (with T being a type variable) and return the sum (resp.) product of all element&#039;s integer value. &lt;br /&gt;
The operators are annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Seq&lt;br /&gt;
: The theory of sequences provides operators for sequences that are defined by direct definitions, thus supported by ProB.&lt;br /&gt;
; Real (unsupported)&lt;br /&gt;
: A theory of real numbers, currently unsupported by ProB.&lt;br /&gt;
; Natural&lt;br /&gt;
: A theory of inductive naturals (defined by a constant zero and a successor function).&lt;br /&gt;
The mkinat operator is annotated such that ProB uses an explicit implementation.&lt;br /&gt;
; List&lt;br /&gt;
: A theory of lists that are either empty or have a head and a tail&lt;br /&gt;
; FixPoint (not really supported)&lt;br /&gt;
: The theory is defined by direct definitions but they usually get so complex that ProB cannot cope with them.&lt;br /&gt;
; closure&lt;br /&gt;
: The operator for transitive closures is supported by ProB.&lt;br /&gt;
The operator is annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Card (contains no operators or data types)&lt;br /&gt;
: Contains theorem about set cardinalities.&lt;br /&gt;
; BoolOps&lt;br /&gt;
: Operators on Booleans (e.g. AND, OR) are defined by direct definitions and as such supported by ProB.&lt;br /&gt;
; BinaryTree&lt;br /&gt;
: Binary Trees are supported by ProB.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; The use of these tags is for experts only. Normally such annotations are delivered with a theory. If you think ProB should provide specific support for a theory, please contact us.&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported (with T being an arbitrary type):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description                                                || Expected type || Return type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure                                     || POW(T**T)     || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set                                           || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set                                       || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| mu       || returns the element of a singleton set                     || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| choose   || returns (deterministically) one element of a non-emtpy set || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(zero,succ) || returns an inductive natural number where zero and succ are the two operators of a natural number datatype with zero having no args and succ having one arg (an inductive natural)  || INT          || Inductive Nat&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2196</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2196"/>
		<updated>2014-06-03T19:41:14Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Download Theories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
The project contains the following theories:&lt;br /&gt;
; SUMandPRODUCT&lt;br /&gt;
: Contains two operators SUM and PRODUCT which take a set of the type POW(T**INT) as argument (with T being a type variable) and return the sum (resp.) product of all element&#039;s integer value. &lt;br /&gt;
The operators are annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Seq&lt;br /&gt;
: The theory of sequences provides operators for sequences that are defined by direct definitions, thus supported by ProB.&lt;br /&gt;
; Real (unsupported)&lt;br /&gt;
: A theory of real numbers, currently unsupported by ProB.&lt;br /&gt;
; Natural&lt;br /&gt;
: A theory of inductive naturals (defined by a constant zero and a successor function).&lt;br /&gt;
The mkinat operator is annotated such that ProB uses an explicit implementation.&lt;br /&gt;
; List&lt;br /&gt;
: A theory of lists that are either empty or have a head and a tail&lt;br /&gt;
; FixPoint (not really supported)&lt;br /&gt;
: The theory is defined by direct definitions but they usually get so complex that ProB cannot cope with them.&lt;br /&gt;
; closure&lt;br /&gt;
: The operator for transitive closures is supported by ProB.&lt;br /&gt;
The operator is annotated such that ProB uses an extra implementation.&lt;br /&gt;
; Card (contains no operators or data types)&lt;br /&gt;
: Contains theorem about set cardinalities.&lt;br /&gt;
; BoolOps&lt;br /&gt;
: Operators on Booleans (e.g. AND, OR) are defined by direct definitions and as such supported by ProB.&lt;br /&gt;
; BinaryTree&lt;br /&gt;
: Binary Trees are supported by ProB.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; The use of these tags is usually for experts only. Normally such annotations are delivered with a theory. If you think ProB should provide specific support for a theory, please contact us.&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported (with T being an arbitrary type):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description                                                || Expected type || Return type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure                                     || POW(T**T)     || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set                                           || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set                                       || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| mu       || returns the element of a singleton set                     || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| choose   || returns (deterministically) one element of a non-emtpy set || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(zero,succ) || returns an inductive natural number where zero and succ are the two operators of a natural number datatype with zero having no args and succ having one arg (an inductive natural)  || INT          || Inductive Nat&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2195</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2195"/>
		<updated>2014-06-03T19:28:46Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Tagging operators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: A description of the supported parts.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Please note:&#039;&#039;&#039; The use of these tags is usually for experts only. Normally such annotations are delivered with a theory. If you think ProB should provide specific support for a theory, please contact us.&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported (with T being an arbitrary type):&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description                                                || Expected type || Return type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure                                     || POW(T**T)     || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set                                           || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set                                       || POW(T**INT)   || INT&lt;br /&gt;
|-&lt;br /&gt;
| mu       || returns the element of a singleton set                     || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| choose   || returns (deterministically) one element of a non-emtpy set || POW(T)        || T&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(zero,succ) || returns an inductive natural number where zero and succ are the two operators of a natural number datatype with zero having no args and succ having one arg (an inductive natural)  || INT          || Inductive Nat&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2194</id>
		<title>Event-B Theories</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B_Theories&amp;diff=2194"/>
		<updated>2014-06-03T19:19:38Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Created page with &amp;#039;ProB has (limited) support for theories.  Currently supported are (examples refer to the theory project below): * recursive datatypes (e.g. the List datatype) * operators defined…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
== Download Theories ==&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: A description of the supported parts.&lt;br /&gt;
&lt;br /&gt;
== Tagging operators ==&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
The use of these tags is usually for experts only. In the theory file below, some of the theories are annotated.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description            || Expected type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set       || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set   || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| mu&lt;br /&gt;
|-&lt;br /&gt;
| choose&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(op1,op2)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: to be continued...&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2192</id>
		<title>Event-B</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2192"/>
		<updated>2014-06-02T13:20:16Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Tagging operators */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB supports animation and model-checking for Event-B specifications. &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in Rodin and click &amp;quot;Install new software&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You see a drop-down list titled &amp;quot;Work with:&amp;quot; at the top of the install dialog. Choose the update site &amp;quot;ProB - ...&amp;quot; and click on &amp;quot;ProB for rodin2&amp;quot; in the field below. Click on the &amp;quot;Next&amp;quot; button at the button on the dialog and proceed with the installation as usual.&lt;br /&gt;
&lt;br /&gt;
Alternativaly, one can use the Tcl/Tk version of ProB but Event-B models must be exported to an .eventb file first (see below).&lt;br /&gt;
&lt;br /&gt;
== Animation and Modelchecking ==&lt;br /&gt;
You can start animation of a model (machine or context) by right-clicking on the model in the Event-B explorer. Choose &amp;quot;Start Animation / Model Checking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Here we should add more details about the ProB perspective and views.&lt;br /&gt;
&lt;br /&gt;
== Export for use with the Tcl/Tk version of ProB ==&lt;br /&gt;
You can export a model (machine or context) to an .eventb - file by right-clicking on the model in the Event-B explorer. You can find the corresponding menu item right below the animation item.&lt;br /&gt;
&lt;br /&gt;
Such a .eventb file can be opened by the command line and Tcl/Tk version of ProB.&lt;br /&gt;
&lt;br /&gt;
== Theories ==&lt;br /&gt;
ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
=== Tagging operators ===&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
The use of these tags is usually for experts only. In the theory file below, some of the theories are annotated.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description            || Expected type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set       || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set   || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| mu&lt;br /&gt;
|-&lt;br /&gt;
| choose&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(op1,op2)&lt;br /&gt;
|}&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: to be continued...&lt;br /&gt;
&lt;br /&gt;
=== Download Theories ===&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: A description of the supported parts.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Template:User_Manual_Index&amp;diff=2191</id>
		<title>Template:User Manual Index</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Template:User_Manual_Index&amp;diff=2191"/>
		<updated>2014-06-02T13:19:40Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* [[Installation]]&lt;br /&gt;
* [[Current Limitations]]&lt;br /&gt;
* [[General Presentation (tcl/tk)]]&lt;br /&gt;
* [[Graphical Viewer]]&lt;br /&gt;
* [[Graphical Visualization]]&lt;br /&gt;
* [[State Space Visualization]]&lt;br /&gt;
* [[Consistency Checking]]&lt;br /&gt;
* [[Constraint Based Checking]]&lt;br /&gt;
* [[Refinement Checking]]&lt;br /&gt;
* [[LTL Model Checking]]&lt;br /&gt;
* [[Using ProB with Atelier B]]&lt;br /&gt;
* [[CSP-M|Using CSP-M in ProB]]&lt;br /&gt;
* [[Event-B|Using ProB for Event-B]]&lt;br /&gt;
* [[ProZ|Using ProZ for Animation and Model Checking of Z Specifications]]&lt;br /&gt;
* [[TLA|Using ProB for TLA Specifications]]&lt;br /&gt;
* [[TLC|Using TLC for B Specifications]]&lt;br /&gt;
* [[Other languages|Using ProB with Promela and other languages]]&lt;br /&gt;
* [[Symmetry Reduction]]&lt;br /&gt;
* [[Recursively Defined Functions]]&lt;br /&gt;
* [[External Functions]]&lt;br /&gt;
* [[Test Case Generation]]&lt;br /&gt;
* [[Using ProB with KODKOD]]&lt;br /&gt;
* [[FAQ]]&lt;br /&gt;
* [[Troubleshooting]]&lt;br /&gt;
* [[Tips: Writing Models for ProB]]&lt;br /&gt;
* [[Using the Command-Line Version of ProB]]&lt;br /&gt;
* [[Summary of B Syntax]]&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=File:Theories2.zip&amp;diff=2190</id>
		<title>File:Theories2.zip</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=File:Theories2.zip&amp;diff=2190"/>
		<updated>2014-06-02T13:18:41Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2189</id>
		<title>Event-B</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2189"/>
		<updated>2014-06-02T13:18:21Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Download Theories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB supports animation and model-checking for Event-B specifications. &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in Rodin and click &amp;quot;Install new software&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You see a drop-down list titled &amp;quot;Work with:&amp;quot; at the top of the install dialog. Choose the update site &amp;quot;ProB - ...&amp;quot; and click on &amp;quot;ProB for rodin2&amp;quot; in the field below. Click on the &amp;quot;Next&amp;quot; button at the button on the dialog and proceed with the installation as usual.&lt;br /&gt;
&lt;br /&gt;
Alternativaly, one can use the Tcl/Tk version of ProB but Event-B models must be exported to an .eventb file first (see below).&lt;br /&gt;
&lt;br /&gt;
== Animation and Modelchecking ==&lt;br /&gt;
You can start animation of a model (machine or context) by right-clicking on the model in the Event-B explorer. Choose &amp;quot;Start Animation / Model Checking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Here we should add more details about the ProB perspective and views.&lt;br /&gt;
&lt;br /&gt;
== Export for use with the Tcl/Tk version of ProB ==&lt;br /&gt;
You can export a model (machine or context) to an .eventb - file by right-clicking on the model in the Event-B explorer. You can find the corresponding menu item right below the animation item.&lt;br /&gt;
&lt;br /&gt;
Such a .eventb file can be opened by the command line and Tcl/Tk version of ProB.&lt;br /&gt;
&lt;br /&gt;
== Theories ==&lt;br /&gt;
ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
=== Tagging operators ===&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
The use of these tags is usually for experts only. In the theory file below, some of the theories are annotated.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description            || Expected type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set       || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set   || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| mu&lt;br /&gt;
|-&lt;br /&gt;
| choose&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(op1,op2)&lt;br /&gt;
|}&lt;br /&gt;
TODO: to be continued...&lt;br /&gt;
&lt;br /&gt;
=== Download Theories ===&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: A description of the supported parts.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2188</id>
		<title>Event-B</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2188"/>
		<updated>2014-06-02T13:18:08Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Some theories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB supports animation and model-checking for Event-B specifications. &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in Rodin and click &amp;quot;Install new software&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You see a drop-down list titled &amp;quot;Work with:&amp;quot; at the top of the install dialog. Choose the update site &amp;quot;ProB - ...&amp;quot; and click on &amp;quot;ProB for rodin2&amp;quot; in the field below. Click on the &amp;quot;Next&amp;quot; button at the button on the dialog and proceed with the installation as usual.&lt;br /&gt;
&lt;br /&gt;
Alternativaly, one can use the Tcl/Tk version of ProB but Event-B models must be exported to an .eventb file first (see below).&lt;br /&gt;
&lt;br /&gt;
== Animation and Modelchecking ==&lt;br /&gt;
You can start animation of a model (machine or context) by right-clicking on the model in the Event-B explorer. Choose &amp;quot;Start Animation / Model Checking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Here we should add more details about the ProB perspective and views.&lt;br /&gt;
&lt;br /&gt;
== Export for use with the Tcl/Tk version of ProB ==&lt;br /&gt;
You can export a model (machine or context) to an .eventb - file by right-clicking on the model in the Event-B explorer. You can find the corresponding menu item right below the animation item.&lt;br /&gt;
&lt;br /&gt;
Such a .eventb file can be opened by the command line and Tcl/Tk version of ProB.&lt;br /&gt;
&lt;br /&gt;
== Theories ==&lt;br /&gt;
ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
=== Tagging operators ===&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
The use of these tags is usually for experts only. In the theory file below, some of the theories are annotated.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description            || Expected type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set       || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set   || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| mu&lt;br /&gt;
|-&lt;br /&gt;
| choose&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(op1,op2)&lt;br /&gt;
|}&lt;br /&gt;
TODO: to be continued...&lt;br /&gt;
&lt;br /&gt;
=== Download Theories ===&lt;br /&gt;
&lt;br /&gt;
An example project with theories: [[media:theories2.zip theories2.zip]]&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO&#039;&#039;&#039;: A description of the supported parts.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2187</id>
		<title>Event-B</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2187"/>
		<updated>2014-06-02T13:15:43Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Theories */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB supports animation and model-checking for Event-B specifications. &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in Rodin and click &amp;quot;Install new software&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You see a drop-down list titled &amp;quot;Work with:&amp;quot; at the top of the install dialog. Choose the update site &amp;quot;ProB - ...&amp;quot; and click on &amp;quot;ProB for rodin2&amp;quot; in the field below. Click on the &amp;quot;Next&amp;quot; button at the button on the dialog and proceed with the installation as usual.&lt;br /&gt;
&lt;br /&gt;
Alternativaly, one can use the Tcl/Tk version of ProB but Event-B models must be exported to an .eventb file first (see below).&lt;br /&gt;
&lt;br /&gt;
== Animation and Modelchecking ==&lt;br /&gt;
You can start animation of a model (machine or context) by right-clicking on the model in the Event-B explorer. Choose &amp;quot;Start Animation / Model Checking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Here we should add more details about the ProB perspective and views.&lt;br /&gt;
&lt;br /&gt;
== Export for use with the Tcl/Tk version of ProB ==&lt;br /&gt;
You can export a model (machine or context) to an .eventb - file by right-clicking on the model in the Event-B explorer. You can find the corresponding menu item right below the animation item.&lt;br /&gt;
&lt;br /&gt;
Such a .eventb file can be opened by the command line and Tcl/Tk version of ProB.&lt;br /&gt;
&lt;br /&gt;
== Theories ==&lt;br /&gt;
ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
=== Tagging operators ===&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
The use of these tags is usually for experts only. In the theory file below, some of the theories are annotated.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
! Tag      || Description            || Expected type&lt;br /&gt;
|-&lt;br /&gt;
| closure1 || the transitive closure || POW(T**T)&lt;br /&gt;
|-&lt;br /&gt;
| SIGMA    || the sum of a set       || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| PI       || the product of a set   || POW(T**INT)&lt;br /&gt;
|-&lt;br /&gt;
| mu&lt;br /&gt;
|-&lt;br /&gt;
| choose&lt;br /&gt;
|-&lt;br /&gt;
| mkinat(op1,op2)&lt;br /&gt;
|}&lt;br /&gt;
TODO: to be continued...&lt;br /&gt;
&lt;br /&gt;
=== Some theories===&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2186</id>
		<title>Event-B</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Event-B&amp;diff=2186"/>
		<updated>2014-06-02T13:01:53Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Created page with &amp;#039;ProB supports animation and model-checking for Event-B specifications.   == Installation == To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;ProB supports animation and model-checking for Event-B specifications. &lt;br /&gt;
&lt;br /&gt;
== Installation ==&lt;br /&gt;
To install the ProB plugin for [http://www.event-b.org Rodin], open the &amp;quot;Help&amp;quot; menu in Rodin and click &amp;quot;Install new software&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You see a drop-down list titled &amp;quot;Work with:&amp;quot; at the top of the install dialog. Choose the update site &amp;quot;ProB - ...&amp;quot; and click on &amp;quot;ProB for rodin2&amp;quot; in the field below. Click on the &amp;quot;Next&amp;quot; button at the button on the dialog and proceed with the installation as usual.&lt;br /&gt;
&lt;br /&gt;
Alternativaly, one can use the Tcl/Tk version of ProB but Event-B models must be exported to an .eventb file first (see below).&lt;br /&gt;
&lt;br /&gt;
== Animation and Modelchecking ==&lt;br /&gt;
You can start animation of a model (machine or context) by right-clicking on the model in the Event-B explorer. Choose &amp;quot;Start Animation / Model Checking&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;TODO:&#039;&#039;&#039; Here we should add more details about the ProB perspective and views.&lt;br /&gt;
&lt;br /&gt;
== Export for use with the Tcl/Tk version of ProB ==&lt;br /&gt;
You can export a model (machine or context) to an .eventb - file by right-clicking on the model in the Event-B explorer. You can find the corresponding menu item right below the animation item.&lt;br /&gt;
&lt;br /&gt;
Such a .eventb file can be opened by the command line and Tcl/Tk version of ProB.&lt;br /&gt;
&lt;br /&gt;
== Theories ==&lt;br /&gt;
ProB has (limited) support for theories.&lt;br /&gt;
&lt;br /&gt;
Currently supported are (examples refer to the theory project below):&lt;br /&gt;
* recursive datatypes (e.g. the List datatype)&lt;br /&gt;
* operators defined by direct definitions (e.g. operators in the BoolOps theory) or recursive definitions (e.g. operators in the List theory)&lt;br /&gt;
* special annotated operators (see below)&lt;br /&gt;
&lt;br /&gt;
Axiomatically defined operators are not supported without additional annotations.&lt;br /&gt;
&lt;br /&gt;
=== Tagging operators ===&lt;br /&gt;
&lt;br /&gt;
ProB has some extra support for certain operators. ProB expects an annotation to an operator that provides the information that it should use a specific implementation for an operator.&lt;br /&gt;
Such tags are given in a .ptm file (&#039;&#039;&#039;P&#039;&#039;&#039;roB &#039;&#039;&#039;T&#039;&#039;&#039;heory &#039;&#039;&#039;M&#039;&#039;&#039;apping). The file must have the same name as the theory.&lt;br /&gt;
&lt;br /&gt;
For each annotated operator, the file contains a line of the form&lt;br /&gt;
 operator &#039;&#039;&#039;Name&#039;&#039;&#039; internal {&#039;&#039;&#039;Tag&#039;&#039;&#039;}&lt;br /&gt;
where &#039;&#039;&#039;Name&#039;&#039;&#039; is the name of the operator in the theory and &#039;&#039;&#039;Tag&#039;&#039;&#039; is a ProB internal name.&lt;br /&gt;
&lt;br /&gt;
Currently are the following tags supported:&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Links&amp;diff=1828</id>
		<title>Links</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Links&amp;diff=1828"/>
		<updated>2013-01-28T08:12:23Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Miscellaneous */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Books ==&lt;br /&gt;
* [http://www.jpbowen.com/publications/thes-b.html The B-Book: Assigning programs to meanings, by Jean-Raymond Abrial] (link is to a review by Jonathan Bowen)&lt;br /&gt;
* [http://www.palgrave.com/science/computing/schneider/ The B-Method: An Introduction, by Steve Schneider]&lt;br /&gt;
== Miscellaneous ==&lt;br /&gt;
* [http://www.stups.uni-duesseldorf.de/w/Publications:ProB ProB Publications] &lt;br /&gt;
* [http://en.wikipedia.org/wiki/B-Method B-Method in Wikipedia] &lt;br /&gt;
* [http://www.bmethod.com/ B-Method Site] from ClearSy&lt;br /&gt;
* [http://www.fm4industry.org/index.php/Can_FM_tools_manage_large_industrial_problems%3F Can FM tools manage large scale industrial problems ?]&lt;br /&gt;
&lt;br /&gt;
== ProB ==&lt;br /&gt;
* [http://www.ecs.soton.ac.uk/~mal/systems/prob.html Old web page of ProB] (in Southampton; use for releases prior to 1.2)&lt;br /&gt;
* [http://www.fm4industry.org/index.php/Productivity_Improvement_of_Data_Consistency_in_Transportation_Models Link to Success Story (written by Cetic)]&lt;br /&gt;
&lt;br /&gt;
== Tools ==&lt;br /&gt;
* [http://lifc.univ-fcomte.fr/~btatibouet/PERSO/JBTOOLS/InstallPlugIn/InstallPlugIn.html jbtools] &lt;br /&gt;
* [http://www.b4free.com/ B4Free] tools for the development of B models&lt;br /&gt;
* [http://www.loria.fr/~cansell/cnp.html Click n Prove]&lt;br /&gt;
* [http://www.event-b.org/ Event-B and Rodin Wiki] ([http://wiki.event-b.org/index.php/Rodin_Platform_Releases Rodin Platform Releases])&lt;br /&gt;
* [http://sourceforge.net/projects/rodin-b-sharp/ Rodin] Eclipse toolset&lt;br /&gt;
* [http://www.b-core.com/btoolkit.html B Toolkit]&lt;br /&gt;
* [http://www.ecs.soton.ac.uk/~cfs/umlb.html U2B] UML to B translation tool&lt;br /&gt;
* [http://www.atelierb.eu/ Atelier B]&lt;br /&gt;
* [http://research.microsoft.com/en-us/um/people/lamport/tla/tla.html TLA+] ([http://research.microsoft.com/en-us/um/people/lamport/tla/tools.html tools for TLA+])&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_ProB_with_KODKOD&amp;diff=1771</id>
		<title>Using ProB with KODKOD</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_ProB_with_KODKOD&amp;diff=1771"/>
		<updated>2012-10-31T13:51:19Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* When is the Kokod translation used */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
[[Category:Stubs]]&lt;br /&gt;
&lt;br /&gt;
As of version 1.3.5 ProB can make use of [http://alloy.mit.edu/kodkod/ Kodkod] as an alternate way of solving constraints.&lt;br /&gt;
&lt;br /&gt;
= How to enable Kodkod =&lt;br /&gt;
&lt;br /&gt;
For the command-line version you need to call prob as follows:&lt;br /&gt;
 probcli -p KODKOD TRUE&lt;br /&gt;
&lt;br /&gt;
Note: to experiment with Kodkod you may want to try out the command:&lt;br /&gt;
 probcli -p KODKOD TRUE -repl&lt;br /&gt;
&lt;br /&gt;
For the ProB Tcl/Tk Version you should select the menu command &amp;quot;Enable Kodkod for Properties&amp;quot; in the Preferences menu.&lt;br /&gt;
&lt;br /&gt;
= What can be translated =&lt;br /&gt;
&lt;br /&gt;
* Types: &lt;br /&gt;
** Basic Types: Deferred Sets, enumerated sets, integers, booleans&lt;br /&gt;
** Sets of basic types&lt;br /&gt;
** Relations between basic types&lt;br /&gt;
** Higher-order types (sets of sets) are not supported&lt;br /&gt;
&lt;br /&gt;
* Operators:&lt;br /&gt;
** Predicates: &amp;amp;, or, =&amp;gt;, &amp;lt;=&amp;gt;, not, !, #, =, /=&lt;br /&gt;
** Booleans: TRUE, FALSE, BOOL, bool(...)&lt;br /&gt;
** Sets: {..,...} {x|P}, POW, card, Cartesian product, \/, /\, -, :, /:, /&amp;lt;:, &amp;lt;&amp;lt;: /&amp;lt;&amp;lt;:&lt;br /&gt;
** Numbers: n..m, &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;=, +, -, *, SIGMA(x).(P|x)&lt;br /&gt;
** Relations: &amp;lt;-&amp;gt;, |-&amp;gt;, dom, ran, id, &amp;lt;|, &amp;lt;&amp;lt;|, |&amp;gt;, |&amp;gt;&amp;gt;, ~, [...], &amp;lt;+, prj1, prj2, closure1&lt;br /&gt;
** x : S+-&amp;gt;T, x:S--&amp;gt;T, ..., lambda&lt;br /&gt;
** currently no operations on sequences are supported&lt;br /&gt;
&lt;br /&gt;
* Some limitations:&lt;br /&gt;
** If integers are used, a predicate can only be translated if a static analysis can estimate the interval of its possible values.&lt;br /&gt;
** Generally only complete predicates are translated or nothing at all, unless you set the &amp;lt;tt&amp;gt;KODKOD_ONLY_FULL&amp;lt;/tt&amp;gt; preference to FALSE.&lt;br /&gt;
&lt;br /&gt;
= When is the Kokod translation used =&lt;br /&gt;
&lt;br /&gt;
* for solving PROPERTIES&lt;br /&gt;
* constraint-based assertion checking (&amp;lt;tt&amp;gt;-cbc_assertions&amp;lt;/tt&amp;gt; command for &amp;lt;tt&amp;gt;probcli&amp;lt;/tt&amp;gt; or the &amp;quot;Check Assertions on Constants&amp;quot; command in the menu Verify -&amp;gt; Constraint-Based Checking)&lt;br /&gt;
* constraint-based deadlock checking&lt;br /&gt;
* in the [[Eval Console]] in the ProB Tcl/Tk version&lt;br /&gt;
* for the REPL in probcli (&amp;lt;tt&amp;gt;probcli -p KODKOD TRUE -repl&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
= More details =&lt;br /&gt;
&lt;br /&gt;
* [http://www.stups.uni-duesseldorf.de/w/Special:Publication/PlaggeLeuschel_Kodkod2012 Plagge, Leuschel. Validating B, Z and TLA+ using ProB and Kodkod. FM&#039;2012, LNCS 7436].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_ProB_with_KODKOD&amp;diff=1770</id>
		<title>Using ProB with KODKOD</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_ProB_with_KODKOD&amp;diff=1770"/>
		<updated>2012-10-31T13:50:46Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* What can be translated */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
[[Category:Stubs]]&lt;br /&gt;
&lt;br /&gt;
As of version 1.3.5 ProB can make use of [http://alloy.mit.edu/kodkod/ Kodkod] as an alternate way of solving constraints.&lt;br /&gt;
&lt;br /&gt;
= How to enable Kodkod =&lt;br /&gt;
&lt;br /&gt;
For the command-line version you need to call prob as follows:&lt;br /&gt;
 probcli -p KODKOD TRUE&lt;br /&gt;
&lt;br /&gt;
Note: to experiment with Kodkod you may want to try out the command:&lt;br /&gt;
 probcli -p KODKOD TRUE -repl&lt;br /&gt;
&lt;br /&gt;
For the ProB Tcl/Tk Version you should select the menu command &amp;quot;Enable Kodkod for Properties&amp;quot; in the Preferences menu.&lt;br /&gt;
&lt;br /&gt;
= What can be translated =&lt;br /&gt;
&lt;br /&gt;
* Types: &lt;br /&gt;
** Basic Types: Deferred Sets, enumerated sets, integers, booleans&lt;br /&gt;
** Sets of basic types&lt;br /&gt;
** Relations between basic types&lt;br /&gt;
** Higher-order types (sets of sets) are not supported&lt;br /&gt;
&lt;br /&gt;
* Operators:&lt;br /&gt;
** Predicates: &amp;amp;, or, =&amp;gt;, &amp;lt;=&amp;gt;, not, !, #, =, /=&lt;br /&gt;
** Booleans: TRUE, FALSE, BOOL, bool(...)&lt;br /&gt;
** Sets: {..,...} {x|P}, POW, card, Cartesian product, \/, /\, -, :, /:, /&amp;lt;:, &amp;lt;&amp;lt;: /&amp;lt;&amp;lt;:&lt;br /&gt;
** Numbers: n..m, &amp;gt;, &amp;lt;, &amp;gt;=, &amp;lt;=, +, -, *, SIGMA(x).(P|x)&lt;br /&gt;
** Relations: &amp;lt;-&amp;gt;, |-&amp;gt;, dom, ran, id, &amp;lt;|, &amp;lt;&amp;lt;|, |&amp;gt;, |&amp;gt;&amp;gt;, ~, [...], &amp;lt;+, prj1, prj2, closure1&lt;br /&gt;
** x : S+-&amp;gt;T, x:S--&amp;gt;T, ..., lambda&lt;br /&gt;
** currently no operations on sequences are supported&lt;br /&gt;
&lt;br /&gt;
* Some limitations:&lt;br /&gt;
** If integers are used, a predicate can only be translated if a static analysis can estimate the interval of its possible values.&lt;br /&gt;
** Generally only complete predicates are translated or nothing at all, unless you set the &amp;lt;tt&amp;gt;KODKOD_ONLY_FULL&amp;lt;/tt&amp;gt; preference to FALSE.&lt;br /&gt;
&lt;br /&gt;
= When is the Kokod translation used =&lt;br /&gt;
&lt;br /&gt;
* for solving PROPERTIES&lt;br /&gt;
* constraint-based assertion checking (&amp;lt;tt&amp;gt;-cbc_assertions&amp;lt;/tt&amp;gt; command for &amp;lt;tt&amp;gt;probcli&amp;lt;/tt&amp;gt; or the &amp;quot;Check Assertions on Constants&amp;quot; command in the menu Verify -&amp;gt; Constraint-Based Checking)&lt;br /&gt;
* in the [[Eval Console]] in the ProB Tcl/Tk version&lt;br /&gt;
* for the REPL in probcli (&amp;lt;tt&amp;gt;probcli -p KODKOD TRUE -repl&amp;lt;/tt&amp;gt;)&lt;br /&gt;
&lt;br /&gt;
= More details =&lt;br /&gt;
&lt;br /&gt;
* [http://www.stups.uni-duesseldorf.de/w/Special:Publication/PlaggeLeuschel_Kodkod2012 Plagge, Leuschel. Validating B, Z and TLA+ using ProB and Kodkod. FM&#039;2012, LNCS 7436].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1511</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1511"/>
		<updated>2012-03-20T06:15:19Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -csp-guide File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
These pages refer to version 1.3.4 of ProB.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 100&lt;br /&gt;
&lt;br /&gt;
Note: with a value of nr=1 ProB will only inspect the &amp;quot;virtual&amp;quot; root node (and compute its outgoing transitions).&lt;br /&gt;
Also see the related options -nodead, -noinv, -nogoal, -noass to influence which kinds of errors are reported by -mc.&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Perform constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will try to find a state which satisfies the invariant and properties and where no operation/event is enabled.&lt;br /&gt;
Note: if ProB finds a counter example then the machine cannot be proven to be deadlock free. However, the particular state may not be reachable from the initial state(s). If you want to find a reachable deadlock you have to use the model checker.&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Constraint-based deadlock finding given a predicate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is like -cbc_deadlock but you provide an additional predicate. ProB will only find deadlocks which also make this predicate true.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -animate &amp;lt;Nr&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| random animation (max Nr steps)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Animates the machine randomly, maximally Nr of steps. It will stop if a deadlock is reached and report an error. You can also use the command &amp;lt;tt&amp;gt;-animate_all&amp;lt;/tt&amp;gt;, which will only stop at a deadlock (and not report an error). Be careful: &amp;lt;tt&amp;gt;-animate_all&amp;lt;/tt&amp;gt; could run forever.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100&lt;br /&gt;
&lt;br /&gt;
=== -det_check ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if every step of the animation is deterministic (i.e., only one operation is possible, and it can only be executed in one possible way as far as parameters and result is concerned).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100 -det_check&lt;br /&gt;
&lt;br /&gt;
=== -det_constants ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if the SETUP_CONSTANTS step is deterministic (i.e., only one way to set up the constants is possible).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -det_constants&lt;br /&gt;
=== -his &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save animation history to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the animation (or model checking) history to a text file. Operations are separated by semicolons.&lt;br /&gt;
The output can be adapted using the -his_option command. With -his_option show_states the -his command will also write out all states to the file (in the form of comments before and after operations). With -his_option show_init only the initial state is written out.&lt;br /&gt;
The -sptxt command is executed after the -init, -animate, -t or -mc commands.&lt;br /&gt;
See also the -sptxt command to only write the current values of variables and constants to a file.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
Additionally we can have the initialised variables and constants:&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt -his_option show_init supersimple.mch&lt;br /&gt;
&lt;br /&gt;
And we can have in addition the values of the variables in between (and at the end):&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt -his_option show_states supersimple.mch&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After performing the other commands, ProB stays in interactive mode and allows the user to manually animate the loaded specification.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can also use --pref instead of -p.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -prefs &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set preferences from preference file &amp;lt;FILE&amp;gt;. The file should be created by the Tcl/Tk version of ProB; this version automatically creates a file called ProB_Preferences.pl. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -prefs ProB_Preferences.pl&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sptxt &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save constants and variables to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the values of constants and variables to a text file in classical B syntax.&lt;br /&gt;
The -sptxt command is executed after the -init, -animate, -t or -mc commands.&lt;br /&gt;
The values are fully written out (some sets, e.g., infinite sets may be written out symbolically).&lt;br /&gt;
&lt;br /&gt;
See also the -his command.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -sptxt state.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
This will write the values of all variables and constants to the file state.txt after animating the machine 5 steps.&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is also an alternate command called -svers which just prints the version number of ProB.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
   VERSION 1.3.4-rc1 (9556:9570M)&lt;br /&gt;
   $LastChangedDate: 2011-11-16 18:36:18 +0100 (Wed, 16 Nov 2011) $&lt;br /&gt;
   Prolog: SICStus 4.2.0 (x86_64-darwin-10.6.0): Mon Mar  7 20:03:36 CET 2011&lt;br /&gt;
   Application Path: /Users/leuschel/svn_root/NewProB&lt;br /&gt;
&lt;br /&gt;
 probcli -svers&lt;br /&gt;
 VERSION 1.3.4-rc1 (9556:9570M)&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS of your machine&lt;br /&gt;
&lt;br /&gt;
If you provide the -t switch, the ASSERTIONS will be checked after executing your trace. Otherwise, they will be checked in an initial state.&lt;br /&gt;
ProB will automatically initialize the machine if you have not provide the -init or -t switch.&lt;br /&gt;
&lt;br /&gt;
You can also use -main_assertions to check only the ASSERTIONS found in the main file.&lt;br /&gt;
&lt;br /&gt;
If your ASSERTIONS are all static (i.e., make no reference to variables), then ProB will remove all CONSTANTS and PROPERTIES from your machine which are not linked (directly or indirectly) to the ASSERTIONS.&lt;br /&gt;
This optimization will only be made if you provide no other switch, such as -mc or -animate which may require the computation of the variables.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -dot_output &amp;lt;PATH&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| define path for generation of dot files for false properties or assertions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This option is applicable to -properties and -assertions. It will result in individual dot files being generated for every false or unknown property or assertion. Assertions are numbered A0,A1,... and properties P0,P1,... You can also force to generate dot files for all properties (i.e., also the true ones) using the -dot_all command-line flag.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties -dot_output somewhere/&lt;br /&gt;
&lt;br /&gt;
This will generate files somewhere/my_P0_false.dot, somewhere/my_P1_false.dot, ...&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Generate test cases for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states.&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds. The found test cases are written to a file &#039;&#039;&#039;testcases.xml&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -cb_tests Depth EndPredicate File ===&lt;br /&gt;
Generate test cases by constraint solving with maximum&lt;br /&gt;
length &#039;&#039;&#039;Depth&#039;&#039;&#039;, the last state satisfies &#039;&#039;&#039;EndPredicate&#039;&#039;&#039;&lt;br /&gt;
and the test cases are written to &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -cb_cover Operation ===&lt;br /&gt;
When generating CB test cases, &#039;&#039;&#039;Operation&#039;&#039;&#039; should be covered.&lt;br /&gt;
The option can be given multiple times to specify several operations.&lt;br /&gt;
Alternatively, multiple operations can be separated by a comma.&lt;br /&gt;
&lt;br /&gt;
=== -test_description File ===&lt;br /&gt;
Read the options for constraint based test case generation from &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -csp-guide File ===&lt;br /&gt;
Use the CSP File &#039;&#039;&#039;File&#039;&#039;&#039; to guide the B Machine (&amp;quot;CSP||B&amp;quot;).&lt;br /&gt;
(This feature is included since version 1.3.5-beta7.)&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section. Will be used if a set s is neither enumerated, has no no card(s)=nr predicate in the PROPERTIES and has no scope_s == Nr DEFINITION.&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations and ways to setup constants computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| COMPRESSION&lt;br /&gt;
| bool ==&amp;gt; Use more aggressive COMPRESSION when storing states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments. ProB will sometimes try to keep certain sets symbolic. If this preference is TRUE then ProB will try to expand those sets for variables and constants after an operation has been executed.&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions. By default ProB will keep certain sets symbolic (e.g., sets it knows are infinite). When this preference is set to TRUE then all set comprehensions and lambda abstractions will at first be kept symbolic and only expanded into explicit form if needed.&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers). Setting this preference to TRUE should substantially improve ProB&#039;s ability to solve complicated predicates involving integers. However, it may cause CLP(FD) overflows in certain circumstances.&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates). With this predicate set to TRUE ProB will be better at solving certain constraint solving tasks. It should be enabled when doing constraint-based invariant or deadlock checking. ProB Tcl/Tk will turn this preference on automatically for those checks.&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of foral&lt;br /&gt;
|-&lt;br /&gt;
| MAX_DISPLAY_SET&lt;br /&gt;
| int ==&amp;gt; Max size for pretty-printing sets (-1 means no limit)&lt;br /&gt;
|-&lt;br /&gt;
| CSP_STRIP_SOURCE_LOC&lt;br /&gt;
| bool ==&amp;gt; Strip source location for CSP; will speed up model checking&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analyzing assertions or properties&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|-&lt;br /&gt;
| NEGATED_INVARIANT_CHECKING&lt;br /&gt;
| bool ==&amp;gt; Perform double evaluation (positive and negative) when checking invariants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To model check a specification M.mch while trying to minimize memory consumption and using symmtery reduction (and accepting hash collisions) do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -p IGNORE_HASH_COLLISIONS TRUE -p FORGET_STATE_SPACE TRUE -p SYMMETRY_MODE hash -mc 999999 M.mch &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1510</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1510"/>
		<updated>2012-03-20T06:15:02Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -test_description File */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
These pages refer to version 1.3.4 of ProB.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 100&lt;br /&gt;
&lt;br /&gt;
Note: with a value of nr=1 ProB will only inspect the &amp;quot;virtual&amp;quot; root node (and compute its outgoing transitions).&lt;br /&gt;
Also see the related options -nodead, -noinv, -nogoal, -noass to influence which kinds of errors are reported by -mc.&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Perform constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This will try to find a state which satisfies the invariant and properties and where no operation/event is enabled.&lt;br /&gt;
Note: if ProB finds a counter example then the machine cannot be proven to be deadlock free. However, the particular state may not be reachable from the initial state(s). If you want to find a reachable deadlock you have to use the model checker.&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Constraint-based deadlock finding given a predicate&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This is like -cbc_deadlock but you provide an additional predicate. ProB will only find deadlocks which also make this predicate true.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -animate &amp;lt;Nr&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| random animation (max Nr steps)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Animates the machine randomly, maximally Nr of steps. It will stop if a deadlock is reached and report an error. You can also use the command &amp;lt;tt&amp;gt;-animate_all&amp;lt;/tt&amp;gt;, which will only stop at a deadlock (and not report an error). Be careful: &amp;lt;tt&amp;gt;-animate_all&amp;lt;/tt&amp;gt; could run forever.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100&lt;br /&gt;
&lt;br /&gt;
=== -det_check ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if every step of the animation is deterministic (i.e., only one operation is possible, and it can only be executed in one possible way as far as parameters and result is concerned).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100 -det_check&lt;br /&gt;
&lt;br /&gt;
=== -det_constants ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if the SETUP_CONSTANTS step is deterministic (i.e., only one way to set up the constants is possible).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -det_constants&lt;br /&gt;
=== -his &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save animation history to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the animation (or model checking) history to a text file. Operations are separated by semicolons.&lt;br /&gt;
The output can be adapted using the -his_option command. With -his_option show_states the -his command will also write out all states to the file (in the form of comments before and after operations). With -his_option show_init only the initial state is written out.&lt;br /&gt;
The -sptxt command is executed after the -init, -animate, -t or -mc commands.&lt;br /&gt;
See also the -sptxt command to only write the current values of variables and constants to a file.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
Additionally we can have the initialised variables and constants:&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt -his_option show_init supersimple.mch&lt;br /&gt;
&lt;br /&gt;
And we can have in addition the values of the variables in between (and at the end):&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt -his_option show_states supersimple.mch&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After performing the other commands, ProB stays in interactive mode and allows the user to manually animate the loaded specification.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can also use --pref instead of -p.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -prefs &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set preferences from preference file &amp;lt;FILE&amp;gt;. The file should be created by the Tcl/Tk version of ProB; this version automatically creates a file called ProB_Preferences.pl. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -prefs ProB_Preferences.pl&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sptxt &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save constants and variables to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the values of constants and variables to a text file in classical B syntax.&lt;br /&gt;
The -sptxt command is executed after the -init, -animate, -t or -mc commands.&lt;br /&gt;
The values are fully written out (some sets, e.g., infinite sets may be written out symbolically).&lt;br /&gt;
&lt;br /&gt;
See also the -his command.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -sptxt state.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
This will write the values of all variables and constants to the file state.txt after animating the machine 5 steps.&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is also an alternate command called -svers which just prints the version number of ProB.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
   VERSION 1.3.4-rc1 (9556:9570M)&lt;br /&gt;
   $LastChangedDate: 2011-11-16 18:36:18 +0100 (Wed, 16 Nov 2011) $&lt;br /&gt;
   Prolog: SICStus 4.2.0 (x86_64-darwin-10.6.0): Mon Mar  7 20:03:36 CET 2011&lt;br /&gt;
   Application Path: /Users/leuschel/svn_root/NewProB&lt;br /&gt;
&lt;br /&gt;
 probcli -svers&lt;br /&gt;
 VERSION 1.3.4-rc1 (9556:9570M)&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS of your machine&lt;br /&gt;
&lt;br /&gt;
If you provide the -t switch, the ASSERTIONS will be checked after executing your trace. Otherwise, they will be checked in an initial state.&lt;br /&gt;
ProB will automatically initialize the machine if you have not provide the -init or -t switch.&lt;br /&gt;
&lt;br /&gt;
You can also use -main_assertions to check only the ASSERTIONS found in the main file.&lt;br /&gt;
&lt;br /&gt;
If your ASSERTIONS are all static (i.e., make no reference to variables), then ProB will remove all CONSTANTS and PROPERTIES from your machine which are not linked (directly or indirectly) to the ASSERTIONS.&lt;br /&gt;
This optimization will only be made if you provide no other switch, such as -mc or -animate which may require the computation of the variables.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -dot_output &amp;lt;PATH&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| define path for generation of dot files for false properties or assertions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This option is applicable to -properties and -assertions. It will result in individual dot files being generated for every false or unknown property or assertion. Assertions are numbered A0,A1,... and properties P0,P1,... You can also force to generate dot files for all properties (i.e., also the true ones) using the -dot_all command-line flag.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties -dot_output somewhere/&lt;br /&gt;
&lt;br /&gt;
This will generate files somewhere/my_P0_false.dot, somewhere/my_P1_false.dot, ...&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Generate test cases for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states.&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds. The found test cases are written to a file &#039;&#039;&#039;testcases.xml&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -cb_tests Depth EndPredicate File ===&lt;br /&gt;
Generate test cases by constraint solving with maximum&lt;br /&gt;
length &#039;&#039;&#039;Depth&#039;&#039;&#039;, the last state satisfies &#039;&#039;&#039;EndPredicate&#039;&#039;&#039;&lt;br /&gt;
and the test cases are written to &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -cb_cover Operation ===&lt;br /&gt;
When generating CB test cases, &#039;&#039;&#039;Operation&#039;&#039;&#039; should be covered.&lt;br /&gt;
The option can be given multiple times to specify several operations.&lt;br /&gt;
Alternatively, multiple operations can be separated by a comma.&lt;br /&gt;
&lt;br /&gt;
=== -test_description File ===&lt;br /&gt;
Read the options for constraint based test case generation from &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -csp-guide File ===&lt;br /&gt;
Use the CSP File &#039;&#039;&#039;File&#039;&#039;&#039; to guide the B Machine (&amp;quot;CSP||B&amp;quot;).&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section. Will be used if a set s is neither enumerated, has no no card(s)=nr predicate in the PROPERTIES and has no scope_s == Nr DEFINITION.&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations and ways to setup constants computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| COMPRESSION&lt;br /&gt;
| bool ==&amp;gt; Use more aggressive COMPRESSION when storing states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments. ProB will sometimes try to keep certain sets symbolic. If this preference is TRUE then ProB will try to expand those sets for variables and constants after an operation has been executed.&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions. By default ProB will keep certain sets symbolic (e.g., sets it knows are infinite). When this preference is set to TRUE then all set comprehensions and lambda abstractions will at first be kept symbolic and only expanded into explicit form if needed.&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers). Setting this preference to TRUE should substantially improve ProB&#039;s ability to solve complicated predicates involving integers. However, it may cause CLP(FD) overflows in certain circumstances.&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates). With this predicate set to TRUE ProB will be better at solving certain constraint solving tasks. It should be enabled when doing constraint-based invariant or deadlock checking. ProB Tcl/Tk will turn this preference on automatically for those checks.&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of foral&lt;br /&gt;
|-&lt;br /&gt;
| MAX_DISPLAY_SET&lt;br /&gt;
| int ==&amp;gt; Max size for pretty-printing sets (-1 means no limit)&lt;br /&gt;
|-&lt;br /&gt;
| CSP_STRIP_SOURCE_LOC&lt;br /&gt;
| bool ==&amp;gt; Strip source location for CSP; will speed up model checking&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analyzing assertions or properties&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|-&lt;br /&gt;
| NEGATED_INVARIANT_CHECKING&lt;br /&gt;
| bool ==&amp;gt; Perform double evaluation (positive and negative) when checking invariants&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To model check a specification M.mch while trying to minimize memory consumption and using symmtery reduction (and accepting hash collisions) do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -p IGNORE_HASH_COLLISIONS TRUE -p FORGET_STATE_SPACE TRUE -p SYMMETRY_MODE hash -mc 999999 M.mch &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=CSP-M&amp;diff=1509</id>
		<title>CSP-M</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=CSP-M&amp;diff=1509"/>
		<updated>2012-03-20T06:13:27Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Command Line option for guided CSP||B */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
ProB supports machine readable CSP&amp;lt;ref&amp;gt;M. Butler and M. Leuschel: &#039;&#039;Combining CSP and B for specification and property verification&#039;&#039;. FM 2005, LNCS 3582, Springer-Verlag, 2005 [http://www.stups.uni-duesseldorf.de/~leuschel/publication_detail.php?id=1]&amp;lt;/ref&amp;gt; as supported by FDR and ProBE. CSP files can be animated and model checked on their own simply by opening a file ending with &amp;quot;.csp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can also use a CSP file to guide a B machine by first opening the B machine and then using the &amp;quot;Open Special&amp;quot; sub-menu of the File menu:&lt;br /&gt;
* use CSP file: uses the CSP file to control the current B machine (see below)&lt;br /&gt;
* use default CSP file: trys to use a CSP with the same name as the current B machine to control it&lt;br /&gt;
&lt;br /&gt;
== Limitations of CSP-M Support ==&lt;br /&gt;
&lt;br /&gt;
ProB now supports FDR and ProBE compatible CSP-M syntax, with the following outstanding issues&lt;br /&gt;
* currying and lambda expressions have only been partially tested&lt;br /&gt;
* extensions and productions are not yet supported (but {| |} is)&lt;br /&gt;
* the priority of rename compared to external choice is unfortunately different than in FDR; please use parentheses&lt;br /&gt;
* mixing of closure with other set operations (especially diff) is not yet fully supported&lt;br /&gt;
* input patterns can only contain variables, tuples, integers and constants (ch?(x,1) is ok, ch?(y+1,x) not). Also, for a record, all arguments must be provided (e.g., for datatype r.Val.Val you have to write r?x?y you cannot write r?xy). Finally, for the moment within &amp;quot;ch? x.y:Set&amp;quot; the &amp;quot;:Set&amp;quot; associates only with y; if you want to check that &amp;quot;x.y&amp;quot; is in Set you need to write: &amp;quot;ch?(x.y):Set.&lt;br /&gt;
* channel declarations can either use associative dot tuples or non-associative tuples but not yet both. Also, sets of tuples as channel types will not work the same way as in FDR. I.e., for channel a:LinkData you should not use LinkData = {0.0, 0.1, 1.0, 1.1} but rather nametype LinkData = {0,1}.{0,1}.&lt;br /&gt;
&lt;br /&gt;
Also, in the first phase we have striven for compatibility and coverage. We still need to tune the animator and model checker for efficiency (there are few known bottlenecks which will be improved, especially with deeply nested CSP synchronization constructs).&lt;br /&gt;
&lt;br /&gt;
== Guiding B Machines with CSP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use this feature of ProB: first open a B Machine, then select &amp;quot;Use CSP File to Guide B...&amp;quot; or &amp;quot;Use Default CSP File&amp;quot; in the &amp;quot;Open Special&amp;quot; submenu of the File menu (you must be in normal user mode to see it).&lt;br /&gt;
&lt;br /&gt;
The CSP file should define a process called &amp;quot;MAIN&amp;quot;.&lt;br /&gt;
This process will be executed in parallel with the B machine.&lt;br /&gt;
The synchronization between the B machine and the CSP specification is as follows:&lt;br /&gt;
* CSP events that have the same name as B Operations will synchronize with B; CSP events that have the same name as a B Variable or Constant can be used to inspect the current value of these, all other CSP events can happen independently of B. In CSP terms the CSP and B are composed as follows:&amp;lt;pre&amp;gt; CSP [| {op1,...,opn} |] B&amp;lt;/pre&amp;gt; where op1,...,opn are the visible operations defined in the B machine.&lt;br /&gt;
* CSP events do not need to provide all arguments of B operations: &lt;br /&gt;
 add!1 -&amp;gt; will match add(1,1) or add(1,2) or ... &lt;br /&gt;
 (supposing add has 2 parameters in B)&lt;br /&gt;
 add -&amp;gt; will match add(1,2), add(2,1), ... &lt;br /&gt;
 add!1!2 -&amp;gt; will only match add(1,2)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* B Output arguments are specified at the end&amp;lt;pre&amp;gt;lookup!X!2 will match lookup(X) --&amp;gt; 2&amp;lt;/pre&amp;gt;Note however, that for non-deterministic operations you generally should only retrieve the output value using a ? and not match against it using a !. Otherwise, the non-determinism of the B operation will be treated as an external choice for the CSP. So, if lookup is non-deterministic then we should do  lookup!X?Res -&amp;gt; Res=2 &amp;amp; Cont  rather than  lookup!X!2 -&amp;gt; Cont.&lt;br /&gt;
* If you have a variable called vv, then you can use vv?VAL to get the value of vv. You can also use, for example, vv!X to check that the value is equal to X. If vv is a relation or function, then you can also use two values on the channel to check for particular tuples in the relation. For example, use vv!3?Y to check whether tuples (3,Y) are in the relation vv (there will be one possible synchronisation per such value).&lt;br /&gt;
* see the file &amp;quot;bookstore_guide.csp&amp;quot; in the provided Machines directory for an example.&lt;br /&gt;
&lt;br /&gt;
For the syntax definition see [[CSP-M Syntax]]&lt;br /&gt;
&lt;br /&gt;
====== Command Line option for guided CSP||B ======&lt;br /&gt;
From the command line, you can specify a CSP File that should be used to guide the B machine with&lt;br /&gt;
 -csp-guide &amp;lt;Filename&amp;gt;&lt;br /&gt;
(This feature is included since version 1.3.5-beta7.)&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=CSP-M&amp;diff=1508</id>
		<title>CSP-M</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=CSP-M&amp;diff=1508"/>
		<updated>2012-03-20T06:09:58Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Guiding B Machines with CSP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
__NOTOC__&lt;br /&gt;
ProB supports machine readable CSP&amp;lt;ref&amp;gt;M. Butler and M. Leuschel: &#039;&#039;Combining CSP and B for specification and property verification&#039;&#039;. FM 2005, LNCS 3582, Springer-Verlag, 2005 [http://www.stups.uni-duesseldorf.de/~leuschel/publication_detail.php?id=1]&amp;lt;/ref&amp;gt; as supported by FDR and ProBE. CSP files can be animated and model checked on their own simply by opening a file ending with &amp;quot;.csp&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
You can also use a CSP file to guide a B machine by first opening the B machine and then using the &amp;quot;Open Special&amp;quot; sub-menu of the File menu:&lt;br /&gt;
* use CSP file: uses the CSP file to control the current B machine (see below)&lt;br /&gt;
* use default CSP file: trys to use a CSP with the same name as the current B machine to control it&lt;br /&gt;
&lt;br /&gt;
== Limitations of CSP-M Support ==&lt;br /&gt;
&lt;br /&gt;
ProB now supports FDR and ProBE compatible CSP-M syntax, with the following outstanding issues&lt;br /&gt;
* currying and lambda expressions have only been partially tested&lt;br /&gt;
* extensions and productions are not yet supported (but {| |} is)&lt;br /&gt;
* the priority of rename compared to external choice is unfortunately different than in FDR; please use parentheses&lt;br /&gt;
* mixing of closure with other set operations (especially diff) is not yet fully supported&lt;br /&gt;
* input patterns can only contain variables, tuples, integers and constants (ch?(x,1) is ok, ch?(y+1,x) not). Also, for a record, all arguments must be provided (e.g., for datatype r.Val.Val you have to write r?x?y you cannot write r?xy). Finally, for the moment within &amp;quot;ch? x.y:Set&amp;quot; the &amp;quot;:Set&amp;quot; associates only with y; if you want to check that &amp;quot;x.y&amp;quot; is in Set you need to write: &amp;quot;ch?(x.y):Set.&lt;br /&gt;
* channel declarations can either use associative dot tuples or non-associative tuples but not yet both. Also, sets of tuples as channel types will not work the same way as in FDR. I.e., for channel a:LinkData you should not use LinkData = {0.0, 0.1, 1.0, 1.1} but rather nametype LinkData = {0,1}.{0,1}.&lt;br /&gt;
&lt;br /&gt;
Also, in the first phase we have striven for compatibility and coverage. We still need to tune the animator and model checker for efficiency (there are few known bottlenecks which will be improved, especially with deeply nested CSP synchronization constructs).&lt;br /&gt;
&lt;br /&gt;
== Guiding B Machines with CSP ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
To use this feature of ProB: first open a B Machine, then select &amp;quot;Use CSP File to Guide B...&amp;quot; or &amp;quot;Use Default CSP File&amp;quot; in the &amp;quot;Open Special&amp;quot; submenu of the File menu (you must be in normal user mode to see it).&lt;br /&gt;
&lt;br /&gt;
The CSP file should define a process called &amp;quot;MAIN&amp;quot;.&lt;br /&gt;
This process will be executed in parallel with the B machine.&lt;br /&gt;
The synchronization between the B machine and the CSP specification is as follows:&lt;br /&gt;
* CSP events that have the same name as B Operations will synchronize with B; CSP events that have the same name as a B Variable or Constant can be used to inspect the current value of these, all other CSP events can happen independently of B. In CSP terms the CSP and B are composed as follows:&amp;lt;pre&amp;gt; CSP [| {op1,...,opn} |] B&amp;lt;/pre&amp;gt; where op1,...,opn are the visible operations defined in the B machine.&lt;br /&gt;
* CSP events do not need to provide all arguments of B operations: &lt;br /&gt;
 add!1 -&amp;gt; will match add(1,1) or add(1,2) or ... &lt;br /&gt;
 (supposing add has 2 parameters in B)&lt;br /&gt;
 add -&amp;gt; will match add(1,2), add(2,1), ... &lt;br /&gt;
 add!1!2 -&amp;gt; will only match add(1,2)&amp;lt;/pre&amp;gt;&lt;br /&gt;
* B Output arguments are specified at the end&amp;lt;pre&amp;gt;lookup!X!2 will match lookup(X) --&amp;gt; 2&amp;lt;/pre&amp;gt;Note however, that for non-deterministic operations you generally should only retrieve the output value using a ? and not match against it using a !. Otherwise, the non-determinism of the B operation will be treated as an external choice for the CSP. So, if lookup is non-deterministic then we should do  lookup!X?Res -&amp;gt; Res=2 &amp;amp; Cont  rather than  lookup!X!2 -&amp;gt; Cont.&lt;br /&gt;
* If you have a variable called vv, then you can use vv?VAL to get the value of vv. You can also use, for example, vv!X to check that the value is equal to X. If vv is a relation or function, then you can also use two values on the channel to check for particular tuples in the relation. For example, use vv!3?Y to check whether tuples (3,Y) are in the relation vv (there will be one possible synchronisation per such value).&lt;br /&gt;
* see the file &amp;quot;bookstore_guide.csp&amp;quot; in the provided Machines directory for an example.&lt;br /&gt;
&lt;br /&gt;
For the syntax definition see [[CSP-M Syntax]]&lt;br /&gt;
&lt;br /&gt;
=== Command Line option for guided CSP||B ===&lt;br /&gt;
From the command line, you can specify a CSP File that should be used to guide the B machine with&lt;br /&gt;
 -csp-guide &amp;lt;Filename&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== References ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Test_Case_Generation&amp;diff=1502</id>
		<title>Test Case Generation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Test_Case_Generation&amp;diff=1502"/>
		<updated>2012-03-08T07:26:05Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* From the command line */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
Constraint based test case generation allows to explore the state space for a&lt;br /&gt;
machine and generate traces of operations that cover certain user defined&lt;br /&gt;
operations and meet a given condition to end the search.&lt;br /&gt;
&lt;br /&gt;
We will use the following B Machine as an example, which is stored in a file called &amp;lt;tt&amp;gt;simplecounter.mch&amp;lt;/tt&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
MACHINE SimpleCounter&lt;br /&gt;
DEFINITIONS MAX==4&lt;br /&gt;
VARIABLES count&lt;br /&gt;
INVARIANT&lt;br /&gt;
 count: 1..MAX&lt;br /&gt;
INITIALISATION count := 1&lt;br /&gt;
OPERATIONS&lt;br /&gt;
  Increase(y) = PRE y: 1..(MAX-count) THEN&lt;br /&gt;
     count := count+y&lt;br /&gt;
  END;&lt;br /&gt;
  Reset = BEGIN count := 1 END&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== How To run ==&lt;br /&gt;
&lt;br /&gt;
To start the test case generation there are two alternatives. We can either provide all settings as command line arguments or in a test description file.&lt;br /&gt;
&lt;br /&gt;
=== From the command line  ===&lt;br /&gt;
From the command line there are four relevant settings to configure the test case&lt;br /&gt;
generation&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
-cb_tests Depth EndPredicate File&lt;br /&gt;
        generate test cases by constraint solving with maximum&lt;br /&gt;
        length Depth, the last state satisfies EndPredicate&lt;br /&gt;
        and the test cases are written to File&lt;br /&gt;
&lt;br /&gt;
-cb_cover Operation&lt;br /&gt;
        when generating CB test cases, Operation should be covered. Each&lt;br /&gt;
        operation to be covered needs to be specified separately.&lt;br /&gt;
&lt;br /&gt;
-p CLPFD&lt;br /&gt;
        flag to enable the CLPFD constraint solver to search the state space, which is highly recommended.&lt;br /&gt;
-p TIME_OUT&lt;br /&gt;
        time out in milliseconds to abort the exploration of each possible trace&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
To generate test cases that cover the event &amp;lt;tt&amp;gt;Increase&amp;lt;/tt&amp;gt; in the machine above, leading to a state where&lt;br /&gt;
&amp;lt;tt&amp;gt;count = MAX-1&amp;lt;/tt&amp;gt; is true and the explored paths do not have a depth of more than 5 operations we would specify this as follows, where we use CLPFD and have a timeout of 2000 ms. for each explored trace:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./probcli.sh simplecounter.mch -cb_tests 5 count=MAX-1 test_results.xml -cb_cover Increase -p CLPFD true -p TIME_OUT 2000&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
The generated test cases are stored in a file called test_results.xml.&lt;br /&gt;
&lt;br /&gt;
=== Test Generation Description ===&lt;br /&gt;
The configuration for the test case generation can also be provided as an XML file.&lt;br /&gt;
The format is shown below:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;test-generation-description&amp;gt;&lt;br /&gt;
  &amp;lt;output-file&amp;gt;OUTPUT FILE NAME&amp;lt;/output-file&amp;gt;&lt;br /&gt;
  &amp;lt;event-coverage&amp;gt;&lt;br /&gt;
    &amp;lt;event&amp;gt;EVENT 1&amp;lt;/event&amp;gt;&lt;br /&gt;
    &amp;lt;event&amp;gt;EVENT 2&amp;lt;/event&amp;gt;&lt;br /&gt;
  &amp;lt;/event-coverage&amp;gt;&lt;br /&gt;
  &amp;lt;target&amp;gt;TARGET PREDICATE&amp;lt;/target&amp;gt;&lt;br /&gt;
  &amp;lt;!-- the parameters section contains parameters that are very ProB-specific --&amp;gt;&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;!-- the maximum depth is the maximum length of a trace of operations/event,&lt;br /&gt;
         the algorithm might stop earlier when all events are covered --&amp;gt;&lt;br /&gt;
    &amp;lt;maximum-depth&amp;gt;N&amp;lt;/maximum-depth&amp;gt;&lt;br /&gt;
    &amp;lt;!-- any ProB preference can be set that is listed when calling &amp;quot;probcli -help -v&amp;quot; --&amp;gt;&lt;br /&gt;
    &amp;lt;!-- other probably interesting preferences are MININT, MAXINT and TIME_OUT --&amp;gt;&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&amp;lt;/test-generation-description&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;Example:&#039;&#039;&#039;&lt;br /&gt;
For our example the description file would look as follows.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;test-generation-description&amp;gt;&lt;br /&gt;
  &amp;lt;output-file&amp;gt;test_results.xml&amp;lt;/output-file&amp;gt;&lt;br /&gt;
  &amp;lt;event-coverage&amp;gt;&lt;br /&gt;
    &amp;lt;event&amp;gt;Increase&amp;lt;/event&amp;gt;&lt;br /&gt;
  &amp;lt;/event-coverage&amp;gt;&lt;br /&gt;
  &amp;lt;target&amp;gt;count = MAX - 1&amp;lt;/target&amp;gt;&lt;br /&gt;
  &amp;lt;parameters&amp;gt;&lt;br /&gt;
    &amp;lt;maximum-depth&amp;gt;5&amp;lt;/maximum-depth&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Please note: TIME_OUT (in milliseconds) is not a global time out, it is per trace --&amp;gt;&lt;br /&gt;
    &amp;lt;preference name=&amp;quot;CLPFD&amp;quot; value=&amp;quot;true&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;!-- Please note: TIME_OUT (in milliseconds) is not a global time out, it is per trace --&amp;gt;&lt;br /&gt;
    &amp;lt;preference name=&amp;quot;TIME_OUT&amp;quot; value=&amp;quot;2000&amp;quot;/&amp;gt;&lt;br /&gt;
  &amp;lt;/parameters&amp;gt;&lt;br /&gt;
&amp;lt;/test-generation-description&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Assuming the test description above is stored in file named&lt;br /&gt;
&amp;lt;tt&amp;gt;simple_counter_test_description.xml&amp;lt;/tt&amp;gt;, we start the test case generation&lt;br /&gt;
with the following call.&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
./probcli.sh simplecounter.mch -test_description simple_counter_test_description.xml&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Colours_of_enabled_operations&amp;diff=1366</id>
		<title>Colours of enabled operations</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Colours_of_enabled_operations&amp;diff=1366"/>
		<updated>2012-01-06T08:07:06Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The enabled operations are shown in different colours, depending on the state where the operation leads to.&lt;br /&gt;
If more than one rule of the following list apply, the first colour is taken:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#191970;&amp;quot;&amp;gt;blue&amp;lt;/span&amp;gt;   : The operation does not change the state (behaves like skip).&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#6e8b3d;&amp;quot;&amp;gt;green&amp;lt;/span&amp;gt;  : The operation leads to a new, not yet explored state.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#cd5c5c;&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;    : The operation leads to a state where the invariant is violated.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#cd6600;&amp;quot;&amp;gt;orange&amp;lt;/span&amp;gt; : The operation leads to a deadlock state, i.e. a state where no operation is enabled.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#000000;&amp;quot;&amp;gt;black&amp;lt;/span&amp;gt; : Otherwise, the operation leads to a state that is different to the current state, has already been visited and is neither an invariant violating or deadlock state.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Colours_of_enabled_operations&amp;diff=1365</id>
		<title>Colours of enabled operations</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Colours_of_enabled_operations&amp;diff=1365"/>
		<updated>2012-01-06T07:57:57Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Created page with &amp;#039;The enabled operations are shown in different colours, depending on the state where the operation leads to. If more than one rule of the following list apply, the first colour is…&amp;#039;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;The enabled operations are shown in different colours, depending on the state where the operation leads to.&lt;br /&gt;
If more than one rule of the following list apply, the first colour is taken:&lt;br /&gt;
&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#191970;&amp;quot;&amp;gt;blue&amp;lt;/span&amp;gt;   : The operation does not change the state (behaves like skip).&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#6e8b3d;&amp;quot;&amp;gt;green&amp;lt;/span&amp;gt;  : The operation leads to a new, not yet explored state.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#cd5c5c;&amp;quot;&amp;gt;red&amp;lt;/span&amp;gt;    : The operation leads to a state where the invariant is violated.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#cd6600;&amp;quot;&amp;gt;orange&amp;lt;/span&amp;gt; : The operation leads to a deadlock state, i.e. a state where no operation is enabled.&lt;br /&gt;
; &amp;lt;span style=&amp;quot;color:#000000;&amp;quot;&amp;gt;black&amp;lt;/span&amp;gt; : Otherwise, the operation leads to a state that is different to the current state, has already been visited and is neither a invariant violating or deadlock state.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=General_Presentation_(tcl/tk)&amp;diff=1364</id>
		<title>General Presentation (tcl/tk)</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=General_Presentation_(tcl/tk)&amp;diff=1364"/>
		<updated>2012-01-06T07:25:21Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* The ProB Main Window */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Template:revision}}&lt;br /&gt;
&lt;br /&gt;
== The ProB Main Window ==&lt;br /&gt;
&lt;br /&gt;
The menu bar contains the various commands to access the features of ProB. It includes the traditional &amp;quot;File&amp;quot; menu with a sub-menu &amp;quot;Recent Files&amp;quot; to quickly access the files previously opened in ProB. Notice the commands &amp;quot;Open\Save&amp;quot;, &amp;quot;Reopen\Save&amp;quot; and &amp;quot;Reopen&amp;quot;; the latter reopens the currently opened file and reinitializes the state of the animation and the model checking processes completely. The &amp;quot;About&amp;quot; menu provides help on the tool and includes a command to check if an update is available on the ProB website. By default, ProB starts with a limited set of commands in the Beginner mode. The Normal mode gives access to more features and can be set in the menu &amp;quot;Preferences|User Mode&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
Under the menu bar, the main window contains four panes:&lt;br /&gt;
&lt;br /&gt;
* In the top pane, the specification of the B machine is displayed with the syntax highlighted and can also be edited by typing directly in this pane;&lt;br /&gt;
* At the bottom, the animation window is composed of three panes which display at the current point during the animation:&lt;br /&gt;
*# The current state of the B machine (State Properties), listing the current values of the machine variables;&lt;br /&gt;
*# The enabled operations (Enabled Operations), listing the operations whose preconditions and guards are true in this state (see [[Colours of enabled operations|here]] for what the different colours mean);&lt;br /&gt;
*# The history of operations leading to this state (History).&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
The &amp;quot;Preferences&amp;quot; menu allows the various features of ProB to be configured. When ProB is started for the first time, it creates a file prob_preferences.pl that stores those preferences.&lt;br /&gt;
* The sub-menu &amp;quot;Font&amp;quot; changes the font size of the B specification displayed in the main window. &lt;br /&gt;
&lt;br /&gt;
The next three commands correspond to groups of preferences displayed in separate pop-up windows.&lt;br /&gt;
&lt;br /&gt;
* The command &amp;quot;Animation Preferences&amp;quot; ... configures important aspects of ProB relative to the animation and model checking of the B specifications. These preferences influence directly the way ProB interprets the B specification and are described in &amp;quot;Animation and Visualisation&amp;quot;, amongst others. &lt;br /&gt;
&lt;br /&gt;
* The command &amp;quot;Graphical Viewer Preferences&amp;quot; ... allows the user to set the options of the visualization tool used by ProB and the shapes and colors used to display the nodes of the state space. &lt;br /&gt;
&lt;br /&gt;
* The command &amp;quot;Syntax Highlight Preferences&amp;quot; ... allows the user to activate the syntax highlight of the B specification in the main window and also to select the various colors corresponding to the syntactic elements of the B notation. &lt;br /&gt;
&lt;br /&gt;
&#039;&#039;&#039;IMPORTANT: Changes in the animation preferences take effect only after reloading the machine.&#039;&#039;&#039;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Download&amp;diff=1188</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Download&amp;diff=1188"/>
		<updated>2011-11-21T12:36:58Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: 1.3.4 - final&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;__NOTOC__&lt;br /&gt;
== Latest Release ==&lt;br /&gt;
&lt;br /&gt;
Note: please use the provided start scripts (StartProB.sh or StartProBWin.bat) to start ProB. On Snow Leopard (Mac OS X 10.6.x) you have to install a [http://www.activestate.com/activetcl/downloads/ corrected version of Tcl/Tk] as indicated below (the distribution provided by Apple is broken).&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Release Date&lt;br /&gt;
! Download&lt;br /&gt;
! Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.4-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 21.&amp;amp;nbsp;Nov&amp;amp;nbsp;2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.4/ProB.linux32.tar.gz Tarball (32bit)],&amp;lt;br/&amp;gt;[http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.4/ProB.linux64.tar.gz Tarball (64bit)],&amp;lt;br/&amp;gt;&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 21. Nov 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.4/ProB.windows.32bit.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| coming soon&lt;br /&gt;
| &amp;lt;!-- [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.4/ProB.mac_os.10.6.6.tar.gz Tarball (with probcli)] --&amp;gt;&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 21. Nov 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.4/ProB.mac_os.10.5.8.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.3-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 10. Feb 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/ProB.linux.tar.gz Tarball (32bit)],&amp;lt;br/&amp;gt;[http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/ProB.linux64.tar.gz Tarball (64bit)],&amp;lt;br/&amp;gt;[http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/prob_1.3.3_i386.deb Ubuntu/Debian package (32bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 10. Feb 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/ProB.windows.32bit.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 10. Feb 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/ProB.mac_os.10.6.6.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 10. Feb 2011&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.3/ProB.mac_os.10.5.8.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.2-final&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Tiger, Intel&lt;br /&gt;
| 30. Jul 2010&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.2/ProB_tiger_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.4],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.1-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 13. Jan 2010&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.1final5/ProB-linux-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.4&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, PPC Tiger&lt;br /&gt;
| 07. Dec 2009&lt;br /&gt;
| [http://nightly.cobra.cs.uni-duesseldorf.de/releases/1.3.1final3/ProB-ppctiger-1.3.1final3.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Tcl/Tk ==&lt;br /&gt;
Please note that Tcl/Tk 8.6 is not yet supported by SICStus Prolog. Also note that on Mac OS X you may have to reinstall Tcl/Tk using one of the links given above (because the Tcl/Tk provided by Apple crashes after opening a file using the standard file selection dialog). On Snow Leopard (Mac OS X 10.6.x) you &amp;lt;b&amp;gt;have&amp;lt;/b&amp;gt; to install Tcl/Tk as indicated above.&lt;br /&gt;
&lt;br /&gt;
== Nightly Build ==&lt;br /&gt;
You can download our nightly integration build from&lt;br /&gt;
[http://nightly.cobra.cs.uni-duesseldorf.de/tcl/ here].&lt;br /&gt;
&lt;br /&gt;
The latest Tcl/Tk version of ProB requires the text module from tklib. This&lt;br /&gt;
should come pre-installed on Mac and often on Windows as well.&lt;br /&gt;
On Linux you need to install tklib. On Ubuntu just type &amp;lt;tt&amp;gt;sudo apt-get install&lt;br /&gt;
tklib&amp;lt;/tt&amp;gt;. If you used the Active Tcl distribution, you need to type&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;tt&amp;gt;sudo /opt/ActiveTcl-8.5/bin/teacup install tklib85&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
on Linux.&lt;br /&gt;
&lt;br /&gt;
Recently you can use ProB with Tcl/Tk 8.5 on Windows. If you have the older&lt;br /&gt;
version of Tcl/Tk 8.4 you have to install the newer one&lt;br /&gt;
8.5 (you should be able to also keep the older version). For Windows we recommend installing [http://downloads.activestate.com/ActiveTcl/releases/ ActiveTcl-8.5] (the win32-ix86-threaded version).&lt;br /&gt;
ActiveTcl-8.5 installs an additional tool &amp;quot;Teacup&amp;quot;, with which you can install&lt;br /&gt;
Tcl/Tk library extensions like &amp;lt;tt&amp;gt;tcllib&amp;lt;/tt&amp;gt; and &amp;lt;tt&amp;gt;tklib&amp;lt;/tt&amp;gt;.&lt;br /&gt;
To use the latest Tcl/Tk version of ProB may have to install tklib. This library&lt;br /&gt;
can be then installed on Windows with Teacup by typing &lt;br /&gt;
&lt;br /&gt;
&amp;lt;tt&amp;gt;teacup install tklib85&amp;lt;/tt&amp;gt; &lt;br /&gt;
&lt;br /&gt;
into the Command Prompt, when you are logged in as an administrator.&lt;br /&gt;
&lt;br /&gt;
== Earlier Releases ==&lt;br /&gt;
&lt;br /&gt;
If you are interested in earlier releases, please have a look at the [http://nightly.cobra.cs.uni-duesseldorf.de/releases/ Download directory].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1079</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1079"/>
		<updated>2011-08-23T11:32:13Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -animate &amp;lt;Nr&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| random animation (max Nr steps)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Animates the machine randomly, maximally Nr of steps. It will stop if a deadlock is reached.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100&lt;br /&gt;
&lt;br /&gt;
=== -det_check ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if every step of the animation is deterministic (i.e., only one operation is possible, and it can only be executed in one possible way as far as parameters and result is concerned).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -animate 100 -det_check&lt;br /&gt;
&lt;br /&gt;
=== -det_constants ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check if animation steps are deterministic&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Checks if the SETUP_CONSTANTS step is deterministic (i.e., only one way to set up the constants is possible).&lt;br /&gt;
Currently this option has only an effect for the -animate &amp;lt;Nr&amp;gt; and the -init commands.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -det_constants&lt;br /&gt;
=== -his &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save animation history to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the animation (or model checking) history to a text file. Operations are separated by semicolons.&lt;br /&gt;
The output can be adapted using the -his_option command. See also the -sptxt command.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
Additionally we can have the initialised variables and constants:&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -his history.txt -his_option show_init supersimple.mch&lt;br /&gt;
&lt;br /&gt;
And we can have the values of the variables in between:&lt;br /&gt;
&lt;br /&gt;
./probcli -animate 5 -his history.txt -his_option show_init -his_option show_states supersimple.mch&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
After performing the other commands, ProB stays in interactive mode and allows the user to manually animate the loaded specification.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
You can also use --pref instead of -p.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -prefs &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set preferences from preference file &amp;lt;FILE&amp;gt;. The file should be created by the Tcl/Tk version of ProB; this version automatically creates a file called ProB_Preferences.pl. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -prefs ProB_Preferences.pl&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sptxt &amp;lt;FILE&amp;gt;===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save constants and variables to a file&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Save the values of constants and variables to a text file. See also the -his command.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -animate 5 -sptxt state.txt  supersimple.mch&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
There is also an alternate command called -svers which just prints the version number of ProB.&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.4-beta9 (8475:8485M)&lt;br /&gt;
  $LastChangedDate: 2011-07-18 17:41:16 +0200 (Mon, 18 Jul 2011) $&lt;br /&gt;
  Prolog: SICStus 4.2.0 (x86_64-darwin-10.6.0): Mon Mar  7 20:03:36 CET 2011&lt;br /&gt;
  Application Path: /Users/leuschel/svn_root/NewProB&lt;br /&gt;
&lt;br /&gt;
 probcli -svers&lt;br /&gt;
 VERSION 1.3.4-beta9 (8475:8485M)&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
You can also use -main_assertions to check only the ASSERTIONS found in the main file.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -dot_output &amp;lt;PATH&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| define path for generation of dot files for false properties or assertions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
This option is applicable to -properties and -assertions. It will result in individual dot files being generated for every false or unknown property or assertion. Assertions are numbered A0,A1,... and properties P0,P1,... You can also force to generate dot files for all properties (i.e., also the true ones) using the -dot_all command-line flag.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties -dot_output somewhere/&lt;br /&gt;
&lt;br /&gt;
This will generate files somewhere/my_P0_false.dot, somewhere/my_P1_false.dot, ...&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Generate test cases for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states.&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds. The found test cases are written to a file &#039;&#039;&#039;testcases.xml&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -cb_tests Depth EndPredicate File ===&lt;br /&gt;
Generate test cases by constraint solving with maximum&lt;br /&gt;
length &#039;&#039;&#039;Depth&#039;&#039;&#039;, the last state satisfies &#039;&#039;&#039;EndPredicate&#039;&#039;&#039;&lt;br /&gt;
and the test cases are written to &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -cb_cover Operation ===&lt;br /&gt;
When generating CB test cases, &#039;&#039;&#039;Operation&#039;&#039;&#039; should be covered.&lt;br /&gt;
The option can be given multiple times to specify several operations.&lt;br /&gt;
Alternatively, multiple operations can be separated by a comma.&lt;br /&gt;
&lt;br /&gt;
=== -test_description File ===&lt;br /&gt;
Read the options for constraint based test case generation from &#039;&#039;&#039;File&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of foral&lt;br /&gt;
|-&lt;br /&gt;
| MAX_DISPLAY_SET&lt;br /&gt;
| int ==&amp;gt; Max size for pretty-printing sets (-1 means no limit)&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To model check a specification M.mch while trying to minimize memory consumption and using symmtery reduction (and accepting hash collisions) do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -p IGNORE_HASH_COLLISIONS TRUE -p FORGET_STATE_SPACE TRUE -p SYMMETRY_MODE hash -mc 999999 M.mch &lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=ProZ&amp;diff=1078</id>
		<title>ProZ</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=ProZ&amp;diff=1078"/>
		<updated>2011-08-23T10:06:25Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]__NOTOC__&lt;br /&gt;
ProZ is a extension of the ProB animator and model checker to support Z specifications. It uses the [http://spivey.oriel.ox.ac.uk/mike/fuzz Fuzz Type Checker] by Mike Spivey  for extracting the formal specification from a LaTeX file. On the website you can also find documentation about the syntax of Z specifications.&lt;br /&gt;
&lt;br /&gt;
= Preferences =&lt;br /&gt;
A Z specification frequently makes use of comprehension sets, which are often introduced by the underlying translation process from Z to B. Normally those comprehension sets should be treated symbolically. To support this, you should set the following in the preferences menu:&lt;br /&gt;
 Animation Preferences -&amp;gt;&lt;br /&gt;
  - Lazy expansion of lambdas &amp;amp; set comprehensions: True&lt;br /&gt;
  - Convert lazy form back into explicit form for Variables and Constants: False&lt;br /&gt;
&lt;br /&gt;
= Structure of the Z Specification =&lt;br /&gt;
&lt;br /&gt;
== State and Initialization ==&lt;br /&gt;
To identify the components (like state, initialization, operations)&lt;br /&gt;
of a Z specification, ProZ expects a certain structure of the&lt;br /&gt;
specification: There must be a schema called &amp;quot;Init&amp;quot;.&lt;br /&gt;
&amp;quot;Init&amp;quot; describes the initialization of the state.&lt;br /&gt;
&amp;quot;Init&amp;quot; must include exactly one schema in the declaration part. This schema is assumed to be the state schema.&lt;br /&gt;
&lt;br /&gt;
For example, let S be the state schema (= is used for \defs):&lt;br /&gt;
  S = [ x,y:N ]&lt;br /&gt;
There are two supported styles for the initialization:&lt;br /&gt;
&lt;br /&gt;
 a)   Init = [ S | x=0 /\ y=1]&lt;br /&gt;
 &lt;br /&gt;
 b)   Init = [ S&#039;| x&#039;=0 /\ y&#039;=1 ]&lt;br /&gt;
&lt;br /&gt;
If you want to use the logic of other schemas besides the state schema&lt;br /&gt;
in the initialization, you can do that by including those schemas in the predicate part.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
&lt;br /&gt;
ProZ identifies schemas as operations if they satisfy the following properties:&lt;br /&gt;
* All variables of the state and their primed counterpart are declared in the operation. Usually this is done by including &amp;quot;\Delta S&amp;quot; in the operation (with S being the state schema).&lt;br /&gt;
* The operation is not referenced by any other schema in the specification&lt;br /&gt;
&lt;br /&gt;
Example: Let S be defined as above:&lt;br /&gt;
&lt;br /&gt;
  A = [ \Delta S | x&#039;=x+1 /\ y&#039;=y ]&lt;br /&gt;
  B = [ x,y,x&#039;,y&#039;:N | x&#039;=x+1 /\ y&#039;=y ]&lt;br /&gt;
  C = [ x,x&#039;:N | x&#039;=x+1 ]&lt;br /&gt;
  D = [ y,y&#039;:N | y&#039;=y ]&lt;br /&gt;
  E = C /\ D&lt;br /&gt;
  F = [ \Xi S | x=0 ]&lt;br /&gt;
&lt;br /&gt;
Then the schemas A,B and E describe all the same operation. F is also identified as an operation that leaves the state unchanged.&lt;br /&gt;
&lt;br /&gt;
=== Axiomatic definitions ===&lt;br /&gt;
&lt;br /&gt;
If axiomatic definitions are present, the declared variables are treated like constants. In the first step of the animation, ProB searches for values that satisfy all predicates of the axiomatic definitions are searched.&lt;br /&gt;
After the first step, the predicates of the axiomatic definitions&lt;br /&gt;
are ignored.&lt;br /&gt;
If you want to define functions in an axiomatic definition, consider that ProB can treat lambda expressions and set comprehensions symbolically.&lt;br /&gt;
Example: The definition of a function &amp;quot;square&amp;quot; could be&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
 | square : Z -&amp;gt; Z&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | square = (\lambda x:Z @ x*x)&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
 | square : Z -&amp;gt; Z&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | \forall x:Z @ square x = x*x&lt;br /&gt;
&lt;br /&gt;
When using ProZ, it is preferable to use the method &amp;quot;a&amp;quot; because the lambda expression can be interpreted symbolically. If &amp;quot;b&amp;quot; is used, ProB will try to find a explicit set that will satisfy the given property.&lt;br /&gt;
&lt;br /&gt;
=== Invariant ===&lt;br /&gt;
&lt;br /&gt;
You can add a B-style invariant to the specification by defining a schema &amp;quot;Invariant&amp;quot; that declares a subset of the state variables. In each explored state the invariant will be checked. The model checking feature of ProB will try to find states that violate the invariant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
It is possible to limit the search space of the model checker by adding a schema &amp;quot;Scope&amp;quot; that declares a subset of the state variables. If such a schema is present, each explored state is checked, if it satisfies the predicate. If not, the state is not further explored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Abbreviation Definitions ===&lt;br /&gt;
&lt;br /&gt;
Abbreviation definitions (e.g. Abbr == {1,2,3}) are used like macros by&lt;br /&gt;
ProZ. A reference to an abbreviation is replaced by its definition in&lt;br /&gt;
a preprocessor phase.&lt;br /&gt;
Thereby schemas defined by abbreviation definitions are ignored when&lt;br /&gt;
ProZ tries to identify components. So, it is recommended to use schema definitions instead of abbreviation definitions (\defs instead of ==) when defining state, initialization, operations, etc.&lt;br /&gt;
&lt;br /&gt;
== Graphical animation ==&lt;br /&gt;
&lt;br /&gt;
(&#039;&#039;&#039;Please note that this functionality is part of the next version. If you want to use graphical animation, please download a version from the [[Download#Nightly Build|Nightly build]].&#039;&#039;&#039;)&lt;br /&gt;
&lt;br /&gt;
Analogous to the graphical animation for B specifications, you can define a function that maps a coordinate to an image.&lt;br /&gt;
Then ProZ will display the grid of images while animating the specification.&lt;br /&gt;
&lt;br /&gt;
To use this feature, add a schema &#039;&#039;&#039;Proz_Settings&#039;&#039;&#039; that contains a variable&lt;br /&gt;
&#039;&#039;&#039;animation\_function&#039;&#039;&#039;. The animation function should map a coordinate to an image. A coordinate is a pair of numbers or given sets.&lt;br /&gt;
&lt;br /&gt;
The type used for images must be an enumerated set where the names of the elements denote their file names (without the suffix .gif).&lt;br /&gt;
&lt;br /&gt;
Please see the specification &#039;&#039;&#039;jars.tex&#039;&#039;&#039; in the examples section.&lt;br /&gt;
&lt;br /&gt;
== Special constructs ==&lt;br /&gt;
&lt;br /&gt;
=== prozignore ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it is not desired to check properties of some variables.&lt;br /&gt;
E.g. ProZ checks if the square function in 2.3.a is a total function by enumerating it (it checks the function only for a limited interval). For more complex definitions the number of entries is often too large to check.&lt;br /&gt;
When the user is sure that those properties are satisfied (like in our example), a solution is relaxing the declaration from &amp;quot;square : Z -&amp;gt; Z&amp;quot; to &amp;quot;square : Z &amp;lt;-&amp;gt; Z&amp;quot;.&lt;br /&gt;
Sometimes this is not easy to do, for instance if schema types are used which imply other constraints.&lt;br /&gt;
&lt;br /&gt;
ProZ supports an operation \prozignore that instructs ProZ to ignore all constraints on the type and to use just the underlying type. For example, the square function could be defined by:&lt;br /&gt;
&lt;br /&gt;
 | square : \prozignore( Z -&amp;gt; Z )&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | square = (\lambda x:Z @ x*x)&lt;br /&gt;
&lt;br /&gt;
If you want to use \prozignore, you must first define a TeX command \prozignore:&lt;br /&gt;
 \newcommand{\prozignore}{ignore_\textsl{\tiny ProZ}}&lt;br /&gt;
&lt;br /&gt;
You can change the definition of the macro as you like because the content is ignored by ProZ. Then you must introduce a generic definition of \prozignore. The definition is ignored by ProB, but Fuzz needs it for type checking.&lt;br /&gt;
 &lt;br /&gt;
 %%pregen \prozignore&lt;br /&gt;
 \begin{gendef}[X]&lt;br /&gt;
   \prozignore~\_ : \power X&lt;br /&gt;
 \end{gendef}&lt;br /&gt;
&lt;br /&gt;
It is also possible to append these lines to the &amp;quot;fuzzlib&amp;quot; in the fuzz distribution.&lt;br /&gt;
&lt;br /&gt;
=== Translation to B ===&lt;br /&gt;
&lt;br /&gt;
You can inspect the result of the translation process with &amp;quot;Show internal representation&amp;quot; in the &amp;quot;Debug&amp;quot; menu.&lt;br /&gt;
Please note that the shown B machine is normally not syntactically correct because of &lt;br /&gt;
* additional constructs like free types&lt;br /&gt;
* additional type information of the form &amp;quot;var:type&amp;quot;&lt;br /&gt;
* names with primes (&#039;) or question marks, etc.&lt;br /&gt;
* lack of support from the pretty printer for every construct&lt;br /&gt;
&lt;br /&gt;
== Known Limitations ==&lt;br /&gt;
* Generic definitions are not supported yet.&lt;br /&gt;
* Miscellaneous unsupported constructs &lt;br /&gt;
** reflexive-transitive closure&lt;br /&gt;
** probably other?&lt;br /&gt;
* The error messages are not very helpful yet.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=ProZ&amp;diff=1038</id>
		<title>ProZ</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=ProZ&amp;diff=1038"/>
		<updated>2011-05-11T07:01:38Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Known Limitations */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]__NOTOC__&lt;br /&gt;
ProZ is a extension of the ProB animator and model checker to support Z specifications. It uses the [http://spivey.oriel.ox.ac.uk/mike/fuzz Fuzz Type Checker] by Mike Spivey  for extracting the formal specification from a LaTeX file. On the website you can also find documentation about the syntax of Z specifications.&lt;br /&gt;
&lt;br /&gt;
= Preferences =&lt;br /&gt;
A Z specification frequently makes use of comprehension sets, which are often introduced by the underlying translation process from Z to B. Normally those comprehension sets should be treated symbolically. To support this, you should set the following in the preferences menu:&lt;br /&gt;
 Animation Preferences -&amp;gt;&lt;br /&gt;
  - Lazy expansion of lambdas &amp;amp; set comprehensions: True&lt;br /&gt;
  - Convert lazy form back into explicit form for Variables and Constants: False&lt;br /&gt;
&lt;br /&gt;
= Structure of the Z Specification =&lt;br /&gt;
&lt;br /&gt;
== State and Initialization ==&lt;br /&gt;
To identify the components (like state, initialization, operations)&lt;br /&gt;
of a Z specification, ProZ expects a certain structure of the&lt;br /&gt;
specification: There must be a schema called &amp;quot;Init&amp;quot;.&lt;br /&gt;
&amp;quot;Init&amp;quot; describes the initialization of the state.&lt;br /&gt;
&amp;quot;Init&amp;quot; must include exactly one schema in the declaration part. This schema is assumed to be the state schema.&lt;br /&gt;
&lt;br /&gt;
For example, let S be the state schema (= is used for \defs):&lt;br /&gt;
  S = [ x,y:N ]&lt;br /&gt;
There are two supported styles for the initialization:&lt;br /&gt;
&lt;br /&gt;
 a)   Init = [ S | x=0 /\ y=1]&lt;br /&gt;
 &lt;br /&gt;
 b)   Init = [ S&#039;| x&#039;=0 /\ y&#039;=1 ]&lt;br /&gt;
&lt;br /&gt;
If you want to use the logic of other schemas besides the state schema&lt;br /&gt;
in the initialization, you can do that by including those schemas in the predicate part.&lt;br /&gt;
&lt;br /&gt;
=== Operations ===&lt;br /&gt;
&lt;br /&gt;
ProZ identifies schemas as operations if they satisfy the following properties:&lt;br /&gt;
* All variables of the state and their primed counterpart are declared in the operation. Usually this is done by including &amp;quot;\Delta S&amp;quot; in the operation (with S being the state schema).&lt;br /&gt;
* The operation is not referenced by any other schema in the specification&lt;br /&gt;
&lt;br /&gt;
Example: Let S be defined as above:&lt;br /&gt;
&lt;br /&gt;
  A = [ \Delta S | x&#039;=x+1 /\ y&#039;=y ]&lt;br /&gt;
  B = [ x,y,x&#039;,y&#039;:N | x&#039;=x+1 /\ y&#039;=y ]&lt;br /&gt;
  C = [ x,x&#039;:N | x&#039;=x+1 ]&lt;br /&gt;
  D = [ y,y&#039;:N | y&#039;=y ]&lt;br /&gt;
  E = C /\ D&lt;br /&gt;
  F = [ \Xi S | x=0 ]&lt;br /&gt;
&lt;br /&gt;
Then the schemas A,B and E describe all the same operation. F is also identified as an operation that leaves the state unchanged.&lt;br /&gt;
&lt;br /&gt;
=== Axiomatic definitions ===&lt;br /&gt;
&lt;br /&gt;
If axiomatic definitions are present, the declared variables are treated like constants. In the first step of the animation, ProB searches for values that satisfy all predicates of the axiomatic definitions are searched.&lt;br /&gt;
After the first step, the predicates of the axiomatic definitions&lt;br /&gt;
are ignored.&lt;br /&gt;
If you want to define functions in an axiomatic definition, consider that ProB can treat lambda expressions and set comprehensions symbolically.&lt;br /&gt;
Example: The definition of a function &amp;quot;square&amp;quot; could be&lt;br /&gt;
&lt;br /&gt;
a)&lt;br /&gt;
 | square : Z -&amp;gt; Z&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | square = (\lambda x:Z @ x*x)&lt;br /&gt;
&lt;br /&gt;
b)&lt;br /&gt;
 | square : Z -&amp;gt; Z&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | \forall x:Z @ square x = x*x&lt;br /&gt;
&lt;br /&gt;
When using ProZ, it is preferable to use the method &amp;quot;a&amp;quot; because the lambda expression can be interpreted symbolically. If &amp;quot;b&amp;quot; is used, ProB will try to find a explicit set that will satisfy the given property.&lt;br /&gt;
&lt;br /&gt;
=== Invariant ===&lt;br /&gt;
&lt;br /&gt;
You can add a B-style invariant to the specification by defining a schema &amp;quot;Invariant&amp;quot; that declares a subset of the state variables. In each explored state the invariant will be checked. The model checking feature of ProB will try to find states that violate the invariant.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Scope ===&lt;br /&gt;
&lt;br /&gt;
It is possible to limit the search space of the model checker by adding a schema &amp;quot;Scope&amp;quot; that declares a subset of the state variables. If such a schema is present, each explored state is checked, if it satisfies the predicate. If not, the state is not further explored.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
=== Abbreviation Definitions ===&lt;br /&gt;
&lt;br /&gt;
Abbreviation definitions (e.g. Abbr == {1,2,3}) are used like macros by&lt;br /&gt;
ProZ. A reference to an abbreviation is replaced by its definition in&lt;br /&gt;
a preprocessor phase.&lt;br /&gt;
Thereby schemas defined by abbreviation definitions are ignored when&lt;br /&gt;
ProZ tries to identify components. So, it is recommended to use schema definitions instead of abbreviation definitions (\defs instead of ==) when defining state, initialization, operations, etc.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Special constructs ==&lt;br /&gt;
&lt;br /&gt;
=== prozignore ===&lt;br /&gt;
&lt;br /&gt;
Sometimes it is not desired to check properties of some variables.&lt;br /&gt;
E.g. ProZ checks if the square function in 2.3.a is a total function by enumerating it (it checks the function only for a limited interval). For more complex definitions the number of entries is often too large to check.&lt;br /&gt;
When the user is sure that those properties are satisfied (like in our example), a solution is relaxing the declaration from &amp;quot;square : Z -&amp;gt; Z&amp;quot; to &amp;quot;square : Z &amp;lt;-&amp;gt; Z&amp;quot;.&lt;br /&gt;
Sometimes this is not easy to do, for instance if schema types are used which imply other constraints.&lt;br /&gt;
&lt;br /&gt;
ProZ supports an operation \prozignore that instructs ProZ to ignore all constraints on the type and to use just the underlying type. For example, the square function could be defined by:&lt;br /&gt;
&lt;br /&gt;
 | square : \prozignore( Z -&amp;gt; Z )&lt;br /&gt;
 |-----------------------&lt;br /&gt;
 | square = (\lambda x:Z @ x*x)&lt;br /&gt;
&lt;br /&gt;
If you want to use \prozignore, you must first define a TeX command \prozignore:&lt;br /&gt;
 \newcommand{\prozignore}{ignore_\textsl{\tiny ProZ}}&lt;br /&gt;
&lt;br /&gt;
You can change the definition of the macro as you like because the content is ignored by ProZ. Then you must introduce a generic definition of \prozignore. The definition is ignored by ProB, but Fuzz needs it for type checking.&lt;br /&gt;
 &lt;br /&gt;
 %%pregen \prozignore&lt;br /&gt;
 \begin{gendef}[X]&lt;br /&gt;
   \prozignore~\_ : \power X&lt;br /&gt;
 \end{gendef}&lt;br /&gt;
&lt;br /&gt;
It is also possible to append these lines to the &amp;quot;fuzzlib&amp;quot; in the fuzz distribution.&lt;br /&gt;
&lt;br /&gt;
=== Translation to B ===&lt;br /&gt;
&lt;br /&gt;
You can inspect the result of the translation process with &amp;quot;Show internal representation&amp;quot; in the &amp;quot;Debug&amp;quot; menu.&lt;br /&gt;
Please note that the shown B machine is normally not syntactically correct because of &lt;br /&gt;
* additional constructs like free types&lt;br /&gt;
* additional type information of the form &amp;quot;var:type&amp;quot;&lt;br /&gt;
* names with primes (&#039;) or question marks, etc.&lt;br /&gt;
* lack of support from the pretty printer for every construct&lt;br /&gt;
&lt;br /&gt;
== Known Limitations ==&lt;br /&gt;
* Generic definitions are not supported yet.&lt;br /&gt;
* Miscellaneous unsupported constructs &lt;br /&gt;
** reflexive-transitive closure&lt;br /&gt;
** probably other?&lt;br /&gt;
* The error messages are not very helpful yet.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1037</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1037"/>
		<updated>2011-05-11T06:55:44Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_tests     */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Generate test cases for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states.&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds. The found test cases are written to a file &#039;&#039;&#039;testcases.xml&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1036</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1036"/>
		<updated>2011-05-11T06:53:52Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_tests     */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Generate test cases for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1035</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1035"/>
		<updated>2011-05-11T06:53:04Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_tests     */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Test cases are generated for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option [[#-mcm_cover &amp;lt;Operation(s)&amp;gt;|-mcm_cover]].&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1034</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1034"/>
		<updated>2011-05-11T06:52:25Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_cover  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Test cases are generated for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;|-mcm-tests]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1033</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1033"/>
		<updated>2011-05-11T06:51:29Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_cover  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Test cases are generated for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See [[#-mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt;]] for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1032</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1032"/>
		<updated>2011-05-11T06:50:27Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_cover */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Test cases are generated for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover &amp;lt;Operation(s)&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Specify an operation or event that should be covered when generating test cases with the &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; option. Multiple operations/events can be specified by seperating them by comma or by using &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039; several times.&lt;br /&gt;
&lt;br /&gt;
See &#039;&#039;&#039;-mcm_test&#039;&#039;&#039; for further details.&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1031</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1031"/>
		<updated>2011-05-11T06:46:07Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_tests     */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Test cases are generated for the given specification. Each test case consists of a sequence of operations resp. events (a so-called trace) that&lt;br /&gt;
* start in a state after an initialisation&lt;br /&gt;
* contain a requested operation/event&lt;br /&gt;
* end in a state where the &amp;lt;EndPredicate&amp;gt; is fulfilled&lt;br /&gt;
&lt;br /&gt;
The user can specify what requested operations/events are with the&lt;br /&gt;
option &#039;&#039;&#039;-mcm_cover&#039;&#039;&#039;.&lt;br /&gt;
&lt;br /&gt;
ProB uses a &amp;quot;breadth-first&amp;quot; approach to search for test cases. When all requested operations/events are covered by test cases within maximum length M, the algorithm will explore the complete state space with that maximum distance M from the initialisation. It outputs all found traces that satisfy the requirements above.&lt;br /&gt;
&lt;br /&gt;
The algorithm stops if either&lt;br /&gt;
* it has covered all required operations/events with the current search depth&lt;br /&gt;
* or it has reached the maximum search depth or maximum number of explored states&lt;br /&gt;
&lt;br /&gt;
The required parameters are:&lt;br /&gt;
;Depth&lt;br /&gt;
: The maximum length of traces that the algorithm searches for test until it stops without covering all required operations/events.&lt;br /&gt;
;MaxStates&lt;br /&gt;
: The maximum number of explored states until the algorithm stops without covering all required operations/events.&lt;br /&gt;
;EndPredicate&lt;br /&gt;
: A predicate in B syntax that the last state of a trace must fulfil. If you do not have any restrictions on that state, use a trivially true predicate like &#039;&#039;&#039;1=1&#039;&#039;&#039;&lt;br /&gt;
;FILE&lt;br /&gt;
: The found test cases a written to the XML file &amp;lt;FILE&amp;gt;.&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml -mcm_cover op1,op2&lt;br /&gt;
&lt;br /&gt;
generates test cases for the operations &#039;&#039;&#039;op1&#039;&#039;&#039; and &#039;&#039;&#039;op2&#039;&#039;&#039; of the specification &#039;&#039;&#039;my.mch&#039;&#039;&#039;. The maximum length of traces is 10, at most 2000 states are explored. Each test case ends in a state where the predicate &#039;&#039;&#039;EndStateVar=TRUE&#039;&#039;&#039; holds.&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Operation When generating MCM test cases, Operation should be covered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1030</id>
		<title>Using the Command-Line Version of ProB</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB&amp;diff=1030"/>
		<updated>2011-05-11T06:17:28Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* -mcm_tests     */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:Tutorial]]&lt;br /&gt;
[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
The command-line version of ProB offers many of the feature of the standalone Tcl/Tk Version via the command-line. As such, you can run ProB from your shell scripts or in your Makefiles.&lt;br /&gt;
&lt;br /&gt;
== Conventions used ==&lt;br /&gt;
&lt;br /&gt;
The following conventions are used in this guide:&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;10&amp;quot;&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | &amp;lt;replaceme&amp;gt;&lt;br /&gt;
| All values that should be replaced with some value are shown withing &amp;lt; &amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| valign=&amp;quot;top&amp;quot; | line breaks&lt;br /&gt;
| Command synopsis for command may be broken up on several lines. When typing commands enter all option on the same line.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== Synopsis ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;probcli [--help]&lt;br /&gt;
&amp;lt;filename&amp;gt; [ &amp;lt;options&amp;gt; ]&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Command-line Arguments for ProB Tcl/Tk ==&lt;br /&gt;
&lt;br /&gt;
Note that the stand-alone Tcl/Tk version also supports a limited form of command-line preferences:&lt;br /&gt;
* &#039;&#039;&#039;FILE&#039;&#039;&#039; (the name/path of the file to be loaded)&lt;br /&gt;
* &#039;&#039;&#039;-prefs PREF_FILE&#039;&#039;&#039;  (to use a specific preferences file, rather than the default ProB_Preferences.pl in your home folder)&lt;br /&gt;
* &#039;&#039;&#039;-batch&#039;&#039;&#039; (to instruct ProB not to try to bring up windows, but to print information only to the terminal)&lt;br /&gt;
* &#039;&#039;&#039;-selfcheck&#039;&#039;&#039; (to run the standard unit tests)&lt;br /&gt;
* &#039;&#039;&#039;-t&#039;&#039;&#039; (to perform the Trace Check on the default trace file associated with the specification)&lt;br /&gt;
* &#039;&#039;&#039;-tcl TCL_Command&#039;&#039;&#039; (to run a particular pre-defined Tcl command)&lt;br /&gt;
* &#039;&#039;&#039;-mc&#039;&#039;&#039; (to perform model checking)&lt;br /&gt;
* &#039;&#039;&#039;-c&#039;&#039;&#039; (to compute the coverage)&lt;br /&gt;
* &#039;&#039;&#039;-ref&#039;&#039;&#039; (to perform the default trace refinment check)&lt;br /&gt;
&lt;br /&gt;
However, the comand-line version of ProB, called &#039;&#039;&#039;probcli&#039;&#039;&#039;, provides more features. It also does not depend on Tcl/Tk and can therefore be run on systems without Tcl/Tk.&lt;br /&gt;
&lt;br /&gt;
== Options ==&lt;br /&gt;
&lt;br /&gt;
=== -mc &amp;lt;nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| model check; checking at most &amp;lt;nr&amp;gt; states&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -no&amp;lt;x&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| restrict errors reported by model checking with &amp;lt;x&amp;gt;=dead,inv,goal,ass&lt;br /&gt;
-nodead : do not report deadlocks&lt;br /&gt;
-noinv : do not report invariant violations&lt;br /&gt;
-nogoal : do not stop if a state satisfying the GOAL predicate has been found&lt;br /&gt;
-noass : do not report assertion violations&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -mc 1000 -nodead -nogoal&lt;br /&gt;
&lt;br /&gt;
=== -bf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed breadth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -bf -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== -df ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| proceed depth-first&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
  probcli my.mch -df -mc 1000&lt;br /&gt;
&lt;br /&gt;
=== --timeout &amp;lt;N&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Global imeout in ms for model checking and refinement checking. &lt;br /&gt;
This does not influence the timeout used for computing individual transitions/operations.&lt;br /&gt;
This has to be set with the -p TIME_OUT &amp;lt;N&amp;gt;. See the description of the -p option.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -timeout 10000&lt;br /&gt;
&lt;br /&gt;
=== -t ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| trace check (associated .trace file must exist)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t&lt;br /&gt;
&lt;br /&gt;
=== -init ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| initialise specification&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init&lt;br /&gt;
 nr_of_components(1)&lt;br /&gt;
 % checking_component_properties(1,[])&lt;br /&gt;
 % enumerating_constants_without_constraints([typedval(fd(_24428,ID),global(ID),iv)])&lt;br /&gt;
 % grounding_wait_flags&lt;br /&gt;
 grounding_component(1)&lt;br /&gt;
 grounding_component(2)&lt;br /&gt;
 % found_enumeration_of_constants(0,2)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,2))&lt;br /&gt;
 % found_enumeration_of_constants(0,1)&lt;br /&gt;
 % backtrack(found_enumeration_of_constants(0,1))&lt;br /&gt;
 &amp;lt;- 0: SETUP_CONSTANTS :: root&lt;br /&gt;
 % Could not set up constants with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation of constants.&lt;br /&gt;
  | 0: SETUP_CONSTANTS success --&amp;gt;0&lt;br /&gt;
  - &amp;lt;- 1: INITIALISATION :: 0&lt;br /&gt;
 % Could not initialise with parameters from trace file.&lt;br /&gt;
 % Will attempt any possible initialisation.&lt;br /&gt;
 ALL OPERATIONS COVERED&lt;br /&gt;
  -  | 1: INITIALISATION success --&amp;gt;2&lt;br /&gt;
  -  - SUCCESS&lt;br /&gt;
&lt;br /&gt;
=== -cbc &amp;lt;OPNAME&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based invariant checking for an operation (also use &amp;lt;OPNAME&amp;gt;=all)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -cbc all&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| constraint-based deadlock checking (also use -cbc_deadlock_pred PRED)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
=== -cbc_deadlock_pred &amp;lt;&amp;lt;PRED&amp;gt;&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| &lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch  -cbc_deadlock_pred &amp;quot;n=15&amp;quot;&lt;br /&gt;
&lt;br /&gt;
=== -strict ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| raise error if mc finds counter example or trace checking fails&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -t -strict&lt;br /&gt;
&lt;br /&gt;
=== -expcterr &amp;lt;ERR&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| expect error to occur (&amp;lt;ERR&amp;gt;=cbc,mc,ltl,...)&lt;br /&gt;
Tell ProB that you expect a certain error to occur. Mainly useful for regression tests (in conjunction with the -strict option).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli examples/B/Benchmarks/CarlaTravelAgencyErr.mch -mc 1000 -expcterr invariant_violation -strict&lt;br /&gt;
&lt;br /&gt;
=== -i ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| interactive animation&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -i&lt;br /&gt;
&lt;br /&gt;
=== -eval ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start interactive read-eval-loop&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p CLPFD TRUE -eval&lt;br /&gt;
&lt;br /&gt;
=== -c ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print coverage statistics&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -c&lt;br /&gt;
&lt;br /&gt;
=== -cc &amp;lt;Nr&amp;gt; &amp;lt;Nr&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print and check coverage statistics&lt;br /&gt;
Print coverage statistics and check that the given number of nodes and transitions have been computed.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -cc 10 25&lt;br /&gt;
&lt;br /&gt;
=== -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Set &amp;lt;PREFERENCE&amp;gt; to &amp;lt;VALUE&amp;gt;. For more information about preferences please have a look at [[Using_the_Command-Line_Version_of_ProB#Preferences | Preferences]]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 8000 -p CLPFD TRUE -mc 10000&lt;br /&gt;
&lt;br /&gt;
=== -card &amp;lt;GS&amp;gt; &amp;lt;VAL&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set scope of B deferred set&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -goal &amp;lt;PRED&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set GOAL predicate for model checker&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 10000000 -goal &amp;quot;n=18&amp;quot;  -strict -expcterr goal_found&lt;br /&gt;
&lt;br /&gt;
=== -s &amp;lt;PORT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on given port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ss ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on port 9000&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -sf ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| start socket server on some free port&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -l &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in &amp;lt;LogFile&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -l my.log&lt;br /&gt;
&lt;br /&gt;
=== -ll ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| log activities in /tmp/prob_cli_debug.log&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -ll&lt;br /&gt;
&lt;br /&gt;
=== -lg &amp;lt;LogFile&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| analyse &amp;lt;LogFile&amp;gt; using gnuplot&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -pp &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -pp my_pp.mch&lt;br /&gt;
&lt;br /&gt;
=== -ppf &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| pretty-print internal representation to &amp;lt;FILE&amp;gt;, force printing of all type infos&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -ppf my_ppf.mch&lt;br /&gt;
&lt;br /&gt;
=== -v ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| set ProB into verbose mode&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mc 1000 -v&lt;br /&gt;
&lt;br /&gt;
=== -version ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| print version information&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli -version&lt;br /&gt;
 ProB Command Line Interface&lt;br /&gt;
  VERSION 1.3.3-final3 ($Rev: 7316 $)&lt;br /&gt;
  $LastChangedDate: 2011-03-09 17:14:00 +0100 (Mi, 09 Mrz 2011) $&lt;br /&gt;
  Prolog: SICStus 4.1.3 (x86-win32-nt-4): Wed Sep 22 21:41:09 WEDT 2010&lt;br /&gt;
&lt;br /&gt;
=== -assertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check ASSERTIONS&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -assertions&lt;br /&gt;
&lt;br /&gt;
=== -properties ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check PROPERTIES&lt;br /&gt;
Note: you should probably first initialise the machine (e.g., with -init).&lt;br /&gt;
If the constants have not yet been set up, probcli will debug the properties.&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -init -properties&lt;br /&gt;
&lt;br /&gt;
=== -rc ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| runtime checking of types/pre-/post-conditions&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlfile &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL formulas in file &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltlassertions ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| check LTL assertions (in DEFINITIONS)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -ltllimit &amp;lt;LIMIT&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| explore at most &amp;lt;LIMIT&amp;gt; states when model-checking LTL&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -save &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| save state space for later refinement check&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -refchk &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| refinement check against previous saved state space&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -mcm_tests &amp;lt;Depth&amp;gt; &amp;lt;MaxStates&amp;gt; &amp;lt;EndPredicate&amp;gt; &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| generate test cases with maximum length &amp;lt;Depth&amp;gt;, explore maximally &amp;lt;MaxStates&amp;gt;, the last state satisfies &amp;lt;EndPredicate&amp;gt; and the test cases are written to &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -mcm_tests 10 2000 &amp;quot;EndStateVar=TRUE&amp;quot; testcases.xml&lt;br /&gt;
&lt;br /&gt;
=== -mcm_cover ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Operation When generating MCM test cases, Operation should be covered&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
=== -spdot &amp;lt;FILE&amp;gt; ===&lt;br /&gt;
&lt;br /&gt;
Description&lt;br /&gt;
&lt;br /&gt;
{| style=&amp;quot;color:black; background-color:#FFFFEF; border:1px solid lightgray;&amp;quot; cellpadding=&amp;quot;10&amp;quot; cellspacing=&amp;quot;0&amp;quot; width=&amp;quot;100%&amp;quot;&lt;br /&gt;
| Write graph of the state space to a dot &amp;lt;FILE&amp;gt;&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch ...&lt;br /&gt;
&lt;br /&gt;
== Preferences ==&lt;br /&gt;
&lt;br /&gt;
You can use these preferences within the command:&lt;br /&gt;
&lt;br /&gt;
 -p &amp;lt;PREFERENCE&amp;gt; &amp;lt;VALUE&amp;gt;&lt;br /&gt;
&lt;br /&gt;
{| cellpadding=&amp;quot;5&amp;quot; cellspacing=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;1&amp;quot;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;PREFERENCE&amp;gt;&lt;br /&gt;
!style=&amp;quot;background-color:lightgrey;&amp;quot; | &amp;lt;VALUE&amp;gt;&lt;br /&gt;
|-&lt;br /&gt;
| MAXINT&lt;br /&gt;
| nat ==&amp;gt; MaxInt, used for expressions such as xx::NAT (2147483647 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| MININT&lt;br /&gt;
| neg ==&amp;gt; MinInt, used for expressions such as xx::INT (-2147483648 for 4 byte ints)&lt;br /&gt;
|-&lt;br /&gt;
| DEFAULT_SETSIZE&lt;br /&gt;
| nat ==&amp;gt; Size of unspecified deferred sets in SETS section&lt;br /&gt;
|-&lt;br /&gt;
| MAX_INITIALISATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Initialisations Computed&lt;br /&gt;
|-&lt;br /&gt;
| MAX_OPERATIONS&lt;br /&gt;
| nat ==&amp;gt; Max Number of Enablings per Operation Computed&lt;br /&gt;
|-&lt;br /&gt;
| ANIMATE_SKIP_OPERATIONS&lt;br /&gt;
| bool ==&amp;gt; Animate operations which are skip or PRE C THEN skip&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_CLOSURES_FOR_STATE&lt;br /&gt;
| bool ==&amp;gt; Convert lazy form back into explicit form for Variables, Constants, Operation Arguments&lt;br /&gt;
|-&lt;br /&gt;
| SYMBOLIC&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of lambdas and set comprehensions&lt;br /&gt;
|-&lt;br /&gt;
| CLPFD&lt;br /&gt;
| bool ==&amp;gt; Use CLP(FD) solver for B integers (restricts range to -2^28..2^28-1 on 32 bit computers)&lt;br /&gt;
|-&lt;br /&gt;
| SMT&lt;br /&gt;
| bool ==&amp;gt; Enable SMT-Mode (aggressive treatment of : and /: inside predicates)&lt;br /&gt;
|-&lt;br /&gt;
| STATIC_ORDERING&lt;br /&gt;
| bool ==&amp;gt; Use static ordering to enumerate constants which occur in most PROPERTIES first&lt;br /&gt;
|-&lt;br /&gt;
| SYMMETRY_MODE&lt;br /&gt;
| [off,flood,nauty,hash] ==&amp;gt; Symmetry Mode: off,flood,canon,nauty,hash&lt;br /&gt;
|-&lt;br /&gt;
| TIME_OUT&lt;br /&gt;
| nat1 ==&amp;gt; Time out for computing enabled transitions (in ms)&lt;br /&gt;
|-&lt;br /&gt;
| USE_PO&lt;br /&gt;
| bool ==&amp;gt; Restrict invariant checking to affected clauses. Also remove clauses that are proven (EventB)&lt;br /&gt;
|-&lt;br /&gt;
| TRY_FIND_ABORT&lt;br /&gt;
| bool ==&amp;gt; Try more aggressively to detect ill-defined expressions (e.g. applying function outside of domain), may slow down animator&lt;br /&gt;
|-&lt;br /&gt;
| NUMBER_OF_ANIMATED_ABSTRACTIONS&lt;br /&gt;
| nat ==&amp;gt; How many levels of refined models are animated by default&lt;br /&gt;
|-&lt;br /&gt;
| ALLOW_INCOMPLETE_SETUP_CONSTANTS&lt;br /&gt;
| bool ==&amp;gt; Allow ProB to proceed even if only part of the CONSTANTS have been found.&lt;br /&gt;
|-&lt;br /&gt;
| PARTITION_PROPERTIES&lt;br /&gt;
| bool ==&amp;gt; Partition predicates (PROPERTIES) into components&lt;br /&gt;
|-&lt;br /&gt;
| USE_RECORD_CONSTRUCTION&lt;br /&gt;
| bool ==&amp;gt; Records: Check if axioms/properties describe a record pattern&lt;br /&gt;
|-&lt;br /&gt;
| OPERATION_REUSE&lt;br /&gt;
| bool ==&amp;gt; Try and reuse previously computed operation effects in B/Event-B&lt;br /&gt;
|-&lt;br /&gt;
| SHOW_EVENTB_ANY_VALUES&lt;br /&gt;
| bool ==&amp;gt; Show top-level ANY variable values of B Operations without parameters as parameters&lt;br /&gt;
|-&lt;br /&gt;
| RANDOMISE_OPERATION_ORDER&lt;br /&gt;
| bool ==&amp;gt; Randomise order of operations when computing successor states&lt;br /&gt;
|-&lt;br /&gt;
| EXPAND_FORALL_UPTO&lt;br /&gt;
| nat ==&amp;gt; When analysing predicates: max. domain size for expansion of forall:&lt;br /&gt;
|-&lt;br /&gt;
| ABSTRACT_DOMAIN_MODULE&lt;br /&gt;
| string ==&amp;gt; Module name with abstract domain and operations&lt;br /&gt;
|-&lt;br /&gt;
| USE_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use widening for abstract interpretation&lt;br /&gt;
|-&lt;br /&gt;
| SOFT_WIDENING&lt;br /&gt;
| bool ==&amp;gt; Use soft widening for every transition&lt;br /&gt;
|-&lt;br /&gt;
| HOW_MANY_STATES_FOR_WIDEN&lt;br /&gt;
| nat1 ==&amp;gt; Extrapolation threshold (Number of loop iterations until widening will be used)&lt;br /&gt;
|-&lt;br /&gt;
| WARN_WHEN_EXPANDING_INFINITE_CLOSURES&lt;br /&gt;
| int ==&amp;gt; Warn when expanding infinite closures if MAXINT larger than:&lt;br /&gt;
|-&lt;br /&gt;
| TRACE_INFO&lt;br /&gt;
| bool ==&amp;gt; Provide various tracing information on the terminal/console.&lt;br /&gt;
|-&lt;br /&gt;
| DOUBLE_EVALUATION&lt;br /&gt;
| bool ==&amp;gt; Evaluate PREDICATES positively and negatively when analysing:&lt;br /&gt;
|-&lt;br /&gt;
| RECURSIVE&lt;br /&gt;
| bool ==&amp;gt; Lazy expansion of *Recursive* set Comprehensions and lambdas&lt;br /&gt;
|-&lt;br /&gt;
| IGNORE_HASH_COLLISIONS&lt;br /&gt;
| bool ==&amp;gt; Ignore Hash Collisions (if true not all states may be computed, visited states are not memorised !)&lt;br /&gt;
|-&lt;br /&gt;
| FORGET_STATE_SPACE&lt;br /&gt;
| bool ==&amp;gt; Do not remember state space (mainly useful in conjunction with Ignore Hash Collisions)&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
Example&lt;br /&gt;
&lt;br /&gt;
 probcli my.mch -p TIME_OUT 5000 -p CLPFD TRUE -p SYMMETRY_MODE hash -mc 1000&lt;br /&gt;
&lt;br /&gt;
== Some probcli examples ==&lt;br /&gt;
&lt;br /&gt;
To load a file My.mch, setup the constants and initialize it do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init My.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
To load a file M.mch, setup the constants, initialize and then check all assertions with Atelier-B&#039;s default values for MININT and MAXINT and an increased timeout of 5 seconds do:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
probcli -init -assertions -p MAXINT 2147483647 -p MININT -2147483647 -p TIME_OUT 5000 M.mch&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User_talk:Lukas_Ladenberger&amp;diff=1000</id>
		<title>User talk:Lukas Ladenberger</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User_talk:Lukas_Ladenberger&amp;diff=1000"/>
		<updated>2011-05-06T07:15:28Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Welcome!&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&#039;&#039;&#039;Welcome to &#039;&#039;ProB Documentation&#039;&#039;!&#039;&#039;&#039;&lt;br /&gt;
We hope you will contribute much and well. &lt;br /&gt;
You will probably want to read the [[Help:Contents|help pages]].&lt;br /&gt;
Again, welcome and have fun! [[User:Daniel Plagge|Daniel Plagge]] 07:15, 6 May 2011 (UTC)&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=User:Lukas_Ladenberger&amp;diff=999</id>
		<title>User:Lukas Ladenberger</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=User:Lukas_Ladenberger&amp;diff=999"/>
		<updated>2011-05-06T07:15:28Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: Creating user page with biography of new user.&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=903</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=903"/>
		<updated>2011-04-06T10:38:52Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann der Benutzer die Schleife erkennen, bzw. den Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
== Semantik vom Release-Operator ==&lt;br /&gt;
&lt;br /&gt;
(pi,i) |= fRg genau dann wenn &lt;br /&gt;
* ein j&amp;gt;=i existiert mit (pi,j) |= f&amp;amp;g und für alle k mit i&amp;lt;=k&amp;lt;j (pi,k) |= g gilt&lt;br /&gt;
* oder (pi,j) |= g für alle j&amp;gt;=i gilt&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;br /&gt;
* Atomare Aussagen sollten in der StateView analysierbar werden, z.B. mittels Kontextmenü. Analog zum &amp;quot;grünen Plus&amp;quot; in der StateView. Ideal wäre DnD.&lt;br /&gt;
&lt;br /&gt;
=Interaktion mit anderen ProB-Komponenten=&lt;br /&gt;
Bisher ist man als Benutzer noch relativ verloren, wenn man das Gegenbeispiel mit dem ursprünglichen Modell in Verbindung bringen will. Die bestehenden Anzeigen sollten mit benutzt werden, um den Benutzer zu helfen.&lt;br /&gt;
&lt;br /&gt;
Wenn in der LTL-View ein Zustand angewählt wird (oder explizit mittels Doppelklick oder so ähnlich), sollte der aktuelle Zustand und History auf&lt;br /&gt;
den Zustand gesetzt werden:&lt;br /&gt;
* In der State-View wird der aktuelle Zustand angezeigt und auswertbar gemacht.&lt;br /&gt;
* In der History-View wird das komplette LTL-Gegenbeispiel angezeigt&lt;br /&gt;
* In der Event-View werden alle möglichen Events angezeigt werden. Der Benutzer kann dann mit den vor-zurück-Buttons durch das Gegenbeispiel navigieren. Wählt er ein Event explizit, bekommt er eine neue History (wie bisher auch)&lt;br /&gt;
* Atomare Aussagen sollten als Formeln in die State-View anzuzeigen sein.&lt;br /&gt;
&lt;br /&gt;
Umgekehrt sollte es möglich sein, die aktuelle Historie auf eine LTL-Formel hin zu überprüfen. Was machen wir in dem Fall mit dem Beispiels-Ende (also Deadlock, abgeschnitten oder Schleife?)&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Tutorial_Complete_Model_Checking&amp;diff=854</id>
		<title>Tutorial Complete Model Checking</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Tutorial_Complete_Model_Checking&amp;diff=854"/>
		<updated>2011-03-01T10:34:43Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: fixed typo&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:User Manual]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
We assume that you have completed [[Tutorial First Model Checking]]. There we have seen how to find invariant violations using the model checker.&lt;br /&gt;
&lt;br /&gt;
In this part we use the following B Machine:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
DEFINITIONS&lt;br /&gt;
MACHINE SimpleCounterForMC&lt;br /&gt;
DEFINITIONS MAX==4; SET_PREF_MAX_OPERATIONS==5&lt;br /&gt;
VARIABLES count&lt;br /&gt;
INVARIANT&lt;br /&gt;
 count: 1..MAX&lt;br /&gt;
INITIALISATION count := 1&lt;br /&gt;
OPERATIONS&lt;br /&gt;
  Increase(y) = PRE y: 1..(MAX-count) THEN&lt;br /&gt;
     count := count+y&lt;br /&gt;
  END;&lt;br /&gt;
  Reset = BEGIN count :: 1..MAX END&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
To load this machine into ProB you can select &amp;quot;New...&amp;quot; from the &amp;quot;File&amp;quot; menu, choose a file name (e.g., &amp;quot;SimpleCounterForMC.mch&amp;quot;) and then paste the text above into the ProB source pane and choose &amp;quot;Save and Reopen&amp;quot; from the &amp;quot;File&amp;quot; menu.&lt;br /&gt;
&lt;br /&gt;
Note that the DEFINITION SET_PREF_MAX_OPERATIONS==5 means that ProB will compute at most 5 possible ways to execute any given operation (i.e., Increase and Reset in this case). We return to this issue below.&lt;br /&gt;
&lt;br /&gt;
== Successful Model Checking ==&lt;br /&gt;
&lt;br /&gt;
Now select the &amp;quot;Model Check...&amp;quot; command in the &amp;quot;Verify&amp;quot; menu which brings up the model checking dialog box:&lt;br /&gt;
[[file:ProBWinModelCheckDialog.png|center]]&lt;br /&gt;
Now click the &amp;quot;Model Check&amp;quot; button. After a short while, ProB will give you the following message:&lt;br /&gt;
[[file:ProBModelCheckNoCounterExampleFound.png|center]]&lt;br /&gt;
&lt;br /&gt;
This message means that ProB has examine all possible states of your B model and has found no invariant violation and no deadlock. (In this case there are 4 states and one root node.)&lt;br /&gt;
&lt;br /&gt;
Does this mean that the B machine is guaranteed to be correct? Does this mean that the AtelierB provers will be able to prove the B machine correct?&lt;br /&gt;
In this case yes, but in general we have to be very careful about interpreting a completed model check.&lt;br /&gt;
Below we examine several issues that have to be considered.&lt;br /&gt;
&lt;br /&gt;
== Computing All Transitions ==&lt;br /&gt;
&lt;br /&gt;
Let us now adapt the above B machine by changing the DEFINITION of MAX to 6.&lt;br /&gt;
Now repeat the model checking exercise above. This time ProB will produce the following message:&lt;br /&gt;
[[file:ProBModelCheckNoCounterExampleFoundTrans.png|center]]&lt;br /&gt;
&lt;br /&gt;
Again no invariant violations or deadlocks were found, but this time ProB warns us that not all transitions were computed. Indeed, the SET_PREF_MAX_OPERATIONS definition tells ProB to compute at most 5 ways to execute an operation. In this case, there are 6 ways to execute the Reset operation. As such, ProB may have missed certain states and thus may have missed an invariant violation.&lt;br /&gt;
&lt;br /&gt;
Indeed, when you double click on the &amp;quot;INITIALISATION(1)&amp;quot; entry in the &amp;quot;EnabledOperations&amp;quot; pane, you will see the following:&lt;br /&gt;
[[file:ProBSimpleCounterForMC_Max.png|center]]&lt;br /&gt;
&lt;br /&gt;
The orange &amp;quot;max&amp;quot; button tells us that not all operations were computed.&lt;br /&gt;
&lt;br /&gt;
In this case, there was no error, but assume we change the definition of the Reset operation to&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
  Reset = BEGIN count :: 1..MAX+1 END&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
and repeat the model checking. We will get the exact same result as above, but this time the machine is actually incorrect.&lt;br /&gt;
The only way to solve ensure that ProB checks the entire state space is to increase the &amp;quot;MAX_OPERATIONS&amp;quot; preference to a suitably large value, e.g., SET_PREF_MAX_OPERATIONS==8 in this case.&lt;br /&gt;
Now model checking will find a counter example:&lt;br /&gt;
[[file:ProBSimpleCounterForMC_InvViol.png|center]]&lt;br /&gt;
&lt;br /&gt;
== Deferred Sets ==&lt;br /&gt;
&lt;br /&gt;
Let us now use the following simple machine:&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
MACHINE SimpleCountDefSet&lt;br /&gt;
SETS ID&lt;br /&gt;
VARIABLES s&lt;br /&gt;
INVARIANT s &amp;lt;: ID &amp;amp; card(s)&amp;lt;10&lt;br /&gt;
INITIALISATION s := {}&lt;br /&gt;
OPERATIONS&lt;br /&gt;
  Add(x) = PRE x:ID &amp;amp; x/:s THEN s := s\/{x} END;&lt;br /&gt;
  Remove(x) = PRE x:s THEN s:= s - {x} END&lt;br /&gt;
END&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Here model checking with ProB will give you the following message:&lt;br /&gt;
[[file:ProBModelCheckNoCounterExampleFound_Unbounded.png|center]]&lt;br /&gt;
&lt;br /&gt;
Unfortunately this does not guarantee that your machine is correct. Indeed, ProB has checked your machine only for one specific cardinality of the deferred set ID (probably 2 or 3).&lt;br /&gt;
Indeed, if you look at the ProB window after loading the above machine you will see:&lt;br /&gt;
[[file:ProBSimpleCountDefSet_BeforeInit.png|center]]&lt;br /&gt;
In the &amp;quot;State Properties&amp;quot; pane you can see that the cardinality of ID was set to 3.&lt;br /&gt;
There are various ways you can influence the cardinality chosen by ProB; one is by adding a DEFINITION of the form:&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
DEFINITIONS  scope_ID == 10&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
If you add this definition, ProB will now find an invariant violation:&lt;br /&gt;
[[file:ProBSimpleCountDefSet_InvViol.png|center]]&lt;br /&gt;
&lt;br /&gt;
However, if you remove the above DEFINITION and add the following instead:&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
PROPERTIES card(ID) = 5&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
ProB will give you the message we have already seen:&lt;br /&gt;
[[file:ProBModelCheckNoCounterExampleFound.png|center]]&lt;br /&gt;
Indeed, you have now explicitly declare ID to be of size 5, and ProB has checked all states for that instantiation of ID. Another solution is to replace the deferred set ID by an enumerated set (this will, however, reduce the potential for symmetry reduction):&lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
SETS ID={id1,id2,id3,id4,id5}&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Infinite Types ==&lt;br /&gt;
&lt;br /&gt;
It could be that your B machine makes use of the mathematical integers (INTEGER) or infinite subsets thereof (NATURAL, NATURAL1). Note that some derived types (such as seq(.)) are defined in terms of INTEGER.&lt;br /&gt;
In this case there could be no way to explore all states of your system.&lt;br /&gt;
For example, the following operation &lt;br /&gt;
&amp;lt;Pre&amp;gt;&lt;br /&gt;
 Choose = BEGIN x :: NATURAL END&lt;br /&gt;
&amp;lt;/Pre&amp;gt;&lt;br /&gt;
can be executed in infinitely many ways. ProB will in this case only find values between 0 and MAXINT for x. As such, a complete model checking does not indicate that your machine&#039;s state space has been fully explored.&lt;br /&gt;
Note: ProB prints a warning on the console when an infinite type (like NATURAL) was &amp;quot;expanded&amp;quot; into a finite subset of it. This information is not yet fed back to the graphical user interface (but we are working on it).&lt;br /&gt;
&lt;br /&gt;
== Model Checking and Proof ==&lt;br /&gt;
&lt;br /&gt;
Finally, even if ProB was able to successfully check the entire state space of your model, this does not imply that you can prove your machine correct with AtelierB (or Rodin).&lt;br /&gt;
We dedicate another tutorial page to this: [[Tutorial Model Checking, Proof and CBC|Model Checking, Proof and CBC]]&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Download&amp;diff=821</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Download&amp;diff=821"/>
		<updated>2011-02-11T09:22:47Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Latest Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Latest Release ==&lt;br /&gt;
&lt;br /&gt;
Note: please use the provided start scripts (StartProB.sh or StartProBWin.bat) to start ProB.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Release Date&lt;br /&gt;
! Download&lt;br /&gt;
! Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.3-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.linux.tar.gz Tarball (32bit)],&amp;lt;br/&amp;gt;[http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.linux64.tar.gz Tarball (64bit)],&amp;lt;br/&amp;gt;[http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/prob_1.3.3_i386.deb Ubuntu/Debian package (32bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.windows.32bit.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.6.6.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.5.8.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.2-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux.tar.gz Tarball (32bit)],&amp;lt;br/&amp;gt;[http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux64.tar.gz Tarball (64bit)],&amp;lt;br/&amp;gt;[http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/prob_1.3.2final1_i386.deb Ubuntu/Debian package (32bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_Win.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_snowleopard.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_leopard_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Tiger, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_tiger_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.4],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.1-final&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-snowleopard-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5 (for Leopard)],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-linux-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.4&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-win-1.3.1final5.zip Zipfile]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, PPC Tiger&lt;br /&gt;
| 07.12.2009&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final3/ProB-ppctiger-1.3.1final3.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== tcl/tk ==&lt;br /&gt;
Please note that Tcl/Tk 8.6 is not yet supported by SICStus Prolog. Also note that on Mac OS X you may have to reinstall Tcl/Tk using one of the links given above (because the Tcl/Tk provided by Apple crashes after opening a file using the standard file selection dialog).&lt;br /&gt;
&lt;br /&gt;
== Earlier Releases ==&lt;br /&gt;
&lt;br /&gt;
If you are interested in earlier releases, please have a look at the [http://www.stups.uni-duesseldorf.de/ProB_Releases/ Download directory].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Download&amp;diff=813</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Download&amp;diff=813"/>
		<updated>2011-02-10T15:50:11Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Latest Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Latest Release ==&lt;br /&gt;
&lt;br /&gt;
Note: please use the provided start scripts (StartProB.sh or StartProBWin.bat) to start ProB.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Release Date&lt;br /&gt;
! Download&lt;br /&gt;
! Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.3-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.linux.tar.gz Tarball], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/prob_1.3.3_i386.deb Ubuntu/Debian package], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.linux64.tar.gz Tarball (64bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.windows.32bit.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.6.6.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.5.8.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.2-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux.tar.gz Tarball], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/prob_1.3.2final1_i386.deb Ubuntu/Debian package], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux64.tar.gz Tarball (64bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_Win.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_snowleopard.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_leopard_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Tiger, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_tiger_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.4],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.1final&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-snowleopard-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5 (for Leopard)],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-linux-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.4&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-win-1.3.1final5.zip Zipfile]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, PPC Tiger&lt;br /&gt;
| 07.12.2009&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final3/ProB-ppctiger-1.3.1final3.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== tcl/tk ==&lt;br /&gt;
Please note that tcl/tk 8.6 is not yet supported by SICStus Prolog. &lt;br /&gt;
&lt;br /&gt;
== Earlier Releases ==&lt;br /&gt;
&lt;br /&gt;
If you are interested in earlier releases, please have a look at the [http://www.stups.uni-duesseldorf.de/ProB_Releases/ Download directory].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Download&amp;diff=812</id>
		<title>Download</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Download&amp;diff=812"/>
		<updated>2011-02-10T15:49:02Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Latest Release */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Latest Release ==&lt;br /&gt;
&lt;br /&gt;
Note: please use the provided start scripts (StartProB.sh or StartProBWin.bat) to start ProB.&lt;br /&gt;
&lt;br /&gt;
{| border=&amp;quot;1&amp;quot;&lt;br /&gt;
! Platform&lt;br /&gt;
! Release Date&lt;br /&gt;
! Download&lt;br /&gt;
! Dependencies&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.3-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB_linux.tar.gz Tarball], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/prob_1.3.3_i386.deb Ubuntu/Debian package], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB_linux64.tar.gz Tarball (64bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.windows.32bit.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.6.6.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 10.02.2011&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.3/ProB.mac_os.10.5.8.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.2-final&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux.tar.gz Tarball], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/prob_1.3.2final1_i386.deb Ubuntu/Debian package], [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_linux64.tar.gz Tarball (64bit)]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.5&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_Win.zip Zipfile (with probcli)]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_snowleopard.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Leopard, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_leopard_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Tiger, Intel&lt;br /&gt;
| 30.07.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.2/ProB_tiger_intel.tar.gz Tarball (with probcli)]&lt;br /&gt;
| [http://www.activestate.com/activetcl/downloads/ Tcl/TK 8.4],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
|-&lt;br /&gt;
| colspan=&amp;quot;4&amp;quot; style=&amp;quot;background-color:lightgrey;&amp;quot; | 1.3.1final&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, Snow Leopard&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-snowleopard-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5 (for Leopard)],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|-&lt;br /&gt;
| Linux &lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-linux-1.3.1final5.tar.gz Tarball]&lt;br /&gt;
| Java Runtime Environment (5.0 or newer), Tcl/Tk 8.4&lt;br /&gt;
|-&lt;br /&gt;
| Windows&lt;br /&gt;
| 13.01.2010&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final5/ProB-win-1.3.1final5.zip Zipfile]&lt;br /&gt;
| [http://downloads.activestate.com/ActiveTcl/releases/ Tcl/Tk 8.4 for Windows],&lt;br /&gt;
[http://java.com/en/ Java Runtime Environment (5.0 or newer)]&lt;br /&gt;
|-&lt;br /&gt;
| Mac OS X, PPC Tiger&lt;br /&gt;
| 07.12.2009&lt;br /&gt;
| [http://www.stups.uni-duesseldorf.de/ProB_Releases/1.3.1final3/ProB-ppctiger-1.3.1final3.tar.gz Tarball]&lt;br /&gt;
| [http://www.tcl.tk/software/tcltk/8.5.html Tcl/TK 8.5],&lt;br /&gt;
[http://www.pixelglow.com/graphviz/ Graphviz for Mac OS X]&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
== tcl/tk ==&lt;br /&gt;
Please note that tcl/tk 8.6 is not yet supported by SICStus Prolog. &lt;br /&gt;
&lt;br /&gt;
== Earlier Releases ==&lt;br /&gt;
&lt;br /&gt;
If you are interested in earlier releases, please have a look at the [http://www.stups.uni-duesseldorf.de/ProB_Releases/ Download directory].&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=809</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=809"/>
		<updated>2011-02-03T12:41:28Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Ideen zu GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann der Benutzer die Schleife erkennen, bzw. den Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
== Semantik vom Release-Operator ==&lt;br /&gt;
&lt;br /&gt;
(pi,i) |= fRg genau dann wenn &lt;br /&gt;
* ein j&amp;gt;=i existiert mit (pi,j) |= f&amp;amp;g und für alle k mit i&amp;lt;=k&amp;lt;j (pi,k) |= g gilt&lt;br /&gt;
* oder (pi,j) |= g für alle j&amp;gt;=i gilt&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;br /&gt;
* Atomare Aussagen sollten in der StateView analysierbar werden, z.B. mittels Kontextmenü. Analog zum &amp;quot;grünen Plus&amp;quot; in der StateView. Ideal wäre DnD.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=808</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=808"/>
		<updated>2011-02-03T12:39:27Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Ideen zu GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann der Benutzer die Schleife erkennen, bzw. den Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
== Semantik vom Release-Operator ==&lt;br /&gt;
&lt;br /&gt;
(pi,i) |= fRg genau dann wenn &lt;br /&gt;
* ein j&amp;gt;=i existiert mit (pi,j) |= f&amp;amp;g und für alle k mit i&amp;lt;=k&amp;lt;j (pi,k) |= g gilt&lt;br /&gt;
* oder (pi,j) |= g für alle j&amp;gt;=i gilt&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;br /&gt;
* Atomare Aussagen sollten in der StateView analysierbar werden, z.B. mittels Kontextmenü.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=806</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=806"/>
		<updated>2011-01-19T13:47:28Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Anzeige */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann der Benutzer die Schleife erkennen, bzw. den Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
== Semantik vom Release-Operator ==&lt;br /&gt;
&lt;br /&gt;
(pi,i) |= fRg genau dann wenn &lt;br /&gt;
* ein j&amp;gt;=i existiert mit (pi,j) |= f&amp;amp;g und für alle k mit i&amp;lt;=k&amp;lt;j (pi,k) |= g gilt&lt;br /&gt;
* oder (pi,j) |= g für alle j&amp;gt;=i gilt&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=805</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=805"/>
		<updated>2011-01-19T13:29:57Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Wichtige Punkte */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann man die Schleife erkennen, bzw. Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
== Semantik vom Release-Operator ==&lt;br /&gt;
&lt;br /&gt;
(pi,i) |= fRg genau dann wenn &lt;br /&gt;
* ein j&amp;gt;=i existiert mit (pi,j) |= f&amp;amp;g und für alle k mit i&amp;lt;=k&amp;lt;j (pi,k) |= g gilt&lt;br /&gt;
* oder (pi,j) |= g für alle j&amp;gt;=i gilt&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
	<entry>
		<id>https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=804</id>
		<title>Plan LTL Visualisation</title>
		<link rel="alternate" type="text/html" href="https://prob.hhu.de/w/index.php?title=Plan_LTL_Visualisation&amp;diff=804"/>
		<updated>2011-01-19T13:08:49Z</updated>

		<summary type="html">&lt;p&gt;Daniel Plagge: /* Ideen zu GUI */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Wichtige Punkte =&lt;br /&gt;
Diese Teile müssen bei der Implementation / Beschreibung in der Arbeit beachtet werden.&lt;br /&gt;
&lt;br /&gt;
== Schleifen, Deadlocks, und gekürzte Gegenbeispiele ==&lt;br /&gt;
Der Modelchecker liefert drei Arten von Gegenbeispielen:&lt;br /&gt;
* Schleifen, der Einstiegspunkt wird mitgeliefert. Eine Schleife repräsentiert einen unendlichen Pfad.&lt;br /&gt;
* Pfade, die im Deadlock enden. Beispiele: Im letzten Zustand des Gegenbeispiels ist X(f) immer falsch, unabhängig von f. G(f) ist im letzten Zustand war, wenn f dort wahr ist.&lt;br /&gt;
* Gekürzte Pfade. Als Gegenbeispiel reicht ein Teil der ursprünglich berechneten Schleife aus. Beispiele: X(f) ist im letzten Zustand nicht ermittelbar. Auch G(f) nicht, wenn f dort wahr ist.&lt;br /&gt;
&lt;br /&gt;
== Verwaltung von LTL-Formeln == &lt;br /&gt;
* Speichern von zuvor eingegebener Formeln (Model-abhängig?)&lt;br /&gt;
* Evtl. mehrere Reiter für verschiedene Formeln&lt;br /&gt;
&lt;br /&gt;
== Anzeige ==&lt;br /&gt;
* Wie kann man die Schleife erkennen, bzw. Unterschied zwischen Deadlock und gekürztem Pfad?&lt;br /&gt;
* Formeln sollten evtl. durch den Rodin-UTF8-Konverter geschickt werden:&lt;br /&gt;
 RodinKeyboardPlugin.getDefault().translate(...)&lt;br /&gt;
Dann muss allerdings der Rodin-Font verwendet werden.&lt;br /&gt;
* Bei Auswahl einer Zelle sollte mittels Farben (oder was besseres?) angezeigt werden, wie es zu dem Wert gekommen ist.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Beispiel: Hier wird die blau hinterlegte Zelle vom Benutzer markiert. In der nächsten Spalte färben sich einige Zellen gelb und rot. &amp;quot;G(not q)&amp;quot; ist in 7 unwahr wegen der Folge 7(not q: true), 8(not q: true), 9(not q:false).&lt;br /&gt;
[[File:ltl1.png|600px|center]]&lt;br /&gt;
&lt;br /&gt;
* Alternativ könnte man die einen Schleifendurchlauf noch einmal hinten dran hängen, um den Benutzer zu entlasten.&lt;br /&gt;
* Die Anzeige der Zustandsnummern bringt dem Benutzer nicht wirklich etwas (wird sonst nirgendwo anders verwendet)&lt;br /&gt;
&lt;br /&gt;
= Ideen zu GUI =&lt;br /&gt;
&lt;br /&gt;
* Interaktion mit der aktuellen Historie: Evtl. sollte das Gegenbeispiel auch in die aktuelle Historie geladen werden und der aktuell ausgewählte Zustand dort auch angezeigt werden.&lt;br /&gt;
* Gleichzeitig in mehreren Reitern verschiedene Pfade speichern&lt;br /&gt;
* Evtl. könnte der Benutzer einen Knopf gebrauchen, mit dem er den Einstiegs-Zustand der Schleife (wenn eine existiert) wieder hinten anhängen kann. Dann verschiebt sich der Einstiegspunkt um 1.&lt;br /&gt;
* Den LTL-Button in der Event-View und den LTL-Dialog entfernen und die Eingabe der Formeln komplett in der LTL-View erledigen.&lt;/div&gt;</summary>
		<author><name>Daniel Plagge</name></author>
	</entry>
</feed>