m (grammatical edits, punctuation edits, changed "well-definedness" to "clarity") |
|||
Line 6: | Line 6: | ||
== Atelier B Plugin == | == Atelier B Plugin == | ||
There is also a [http://www.tools.clearsy.com/index.php5?title=ProB_etool_generation plugin for Atelier B] | There is also a [http://www.tools.clearsy.com/index.php5?title=ProB_etool_generation plugin for Atelier B] for use withthe standalone Tcl/Tk Version on [http://www.atelierb.eu/ Atelier B] projects. | ||
== Differences with Atelier B == | == Differences with Atelier B == | ||
Line 16: | Line 16: | ||
* Typing: | * Typing: | ||
** ProB makes use of a unification-based type inference algorithm. As such, typing information can not only flow from left-to-right inside a formula, but also from | ** ProB makes use of a unification-based type inference algorithm. As such, typing information can not only flow from left-to-right inside a formula, but also from right-to-left. For example, it is sufficient to type <tt>xx<:yy & yy<:NAT</tt> instead of typing both <tt>xx</tt> and <tt>yy</tt> in ProB. | ||
** Similar to Rodin, ProB extracts typing information from all predicates. As such, <tt>xx/:{1,2}</tt> | ** Similar to Rodin, ProB extracts typing information from all predicates. As such, it is sufficient to type <tt>xx/:{1,2}</tt> instead of <tt>xx</tt>. | ||
* 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, | * 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. | ||
=== Limitations === | === Limitations === | ||
* Parsing: ProB will require parentheses around the comma, the relational composition and parallel product operators. For example, you cannot write <tt>r2=rel;rel</tt>. You need to write <tt>r2=(rel;rel)</tt>. This allows ProB to distinguish the relational composition from sequential composition (or other uses of the semicolon). | * Parsing: ProB will require parentheses around the comma, the relational composition, and parallel product operators. For example, you cannot write <tt>r2=rel;rel</tt>. You need to write <tt>r2=(rel;rel)</tt>. This allows ProB to distinguish the relational composition from the sequential composition (or other uses of the semicolon). | ||
* | * Clarity: 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 clarity 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. | ||
Note | 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). | ||
* Unsupported Operators: | * Unsupported Operators: | ||
** fnc, rel These operators are not supported. Also, succ and pred are only supported when applied to numbers (i.e., succ(x) is supported; dom(succ) is not). | ** fnc, rel: These operators are not supported. Also, succ and pred are only supported when applied to numbers (i.e., succ(x) is supported; dom(succ) is not). | ||
** Trees and binary trees | ** Trees and binary trees: These onstructs are not supported (the STRING type is now supported); | ||
** VALUES This clause of IMPLEMENTATION machines is not yet supported; | ** VALUES: This clause of the IMPLEMENTATION 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).