No edit summary |
|||
Line 23: | Line 23: | ||
* DEFINITIONS: the definitions and its arguments are checked by ProB. We believe this to be an important feature for a formal method language. However, as such, every DEFINITION must be either a predicate, an expression or a substitution. You '''cannot''' use, for example, lists of identifiers as a definition. Also, for the moment, the arguments to DEFINITIONS have to be expressions. Finally, when replacing DEFINITIONS the associativity is not changed. E.g., with <tt>PLUS(x,y) == x+y</tt>, the expression <tt>PLUS(2,3)*10</tt> will evaluate to 50 (and not to 32 as with Atelier-B). | * DEFINITIONS: the definitions and its arguments are checked by ProB. We believe this to be an important feature for a formal method language. However, as such, every DEFINITION must be either a predicate, an expression or a substitution. You '''cannot''' use, for example, lists of identifiers as a definition. Also, for the moment, the arguments to DEFINITIONS have to be expressions. Finally, when replacing DEFINITIONS the associativity is not changed. E.g., with <tt>PLUS(x,y) == x+y</tt>, the expression <tt>PLUS(2,3)*10</tt> will evaluate to 50 (and not to 32 as with Atelier-B). | ||
* for a LET substitution, Atelier-B does not allow introduced identifiers to be used in the right-hand side of equations; ProB allows <tt>LET x,y BE x=2 & y=x*x IN ... END</tt> | |||
* ProB allows WHILE loops and sequential composition in abstract machines | |||
* ProB now allows the IF-THEN-ELSE for expressions with parentheses around it: <tt>(IF x<0 THEN -x ELSE x END)</tt> | |||
=== Limitations === | === Limitations === | ||
Line 29: | Line 36: | ||
* [[Well-Definedness_Checking|Well-definedness]]: ProB will try to check if your predicates are well-defined during animation or model checking. For this ProB assumes (similar to Rodin) a stricter left-to-right definition of well-definedness than Atelier B. | * [[Well-Definedness_Checking|Well-definedness]]: ProB will try to check if your predicates are well-defined during animation or model checking. For this ProB assumes (similar to Rodin) a stricter left-to-right definition of well-definedness than Atelier B. | ||
* Closure: The transitive and reflexive closure operator of classical B is not supported as defined in the B-Book by Abrial. AtelierB also does not support the operator as defined in the B-Book (as this version cannot be applied in practice). For the reflexive component of closure, ProB will compute the elements in the domain and range of the relation. | * Closure: The transitive and reflexive closure operator of classical B is not supported as defined in the B-Book by Abrial. AtelierB also does not support the operator as defined in the B-Book (as this version cannot be applied in practice). For the reflexive component of closure, ProB will compute the elements in the domain and range of the relation. | ||
Line 36: | Line 42: | ||
* Unsupported Operators: | * Unsupported Operators: | ||
** Trees and binary trees: | ** Trees and binary trees: most but not all tree operators are supported yet (the <tt>STRING</tt> type is now supported); | ||
** <tt>VALUES</tt>: This clause of the <tt>IMPLEMENTATION</tt> machines is not yet supported; | ** <tt>VALUES</tt>: This clause of the <tt>IMPLEMENTATION</tt> machines is not yet supported; | ||
* There are also some general limitations wrt refinements. See [[Current Limitations#Multiple Machines and Refinements]] for more details. | * There are also some general limitations wrt refinements. See [[Current Limitations#Multiple Machines and Refinements]] for more details. |
As of version 1.3, ProB contains a much improved parser which tries be compliant with
Atelier B as much as possible.
There is also a plugin for Atelier B for use withthe standalone Tcl/Tk Version on Atelier B projects.
Note however, that the transitive closure operator closure1 is fully supported, and hence one can translate an expression closure(e), where e is a binary relation over some domain d, into the expression closure1(e) \/ id(d).