Using ProB with Atelier B: Difference between revisions

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], in order to use the standalone Tcl/Tk Version on [http://www.atelierb.eu/ Atelier B] projects.
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 left-to-right. For example, <tt>xx<:yy & yy<:NAT</tt> is sufficient to type both <tt>xx</tt> and <tt>yy</tt> in ProB.
** 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> is sufficient to type <tt>xx</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, e.g., lists of identifiers as a definition. Also, for the moment, the arguments to DEFINITIONS have to be expressions.
* 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).


* Well-Definedness:ProB will try to check well-definedness of your predicates during animation or model checking. For this, ProB assumes (similar to Rodin) a stricter left-to-right definition of well-definedness than Atelier B.
* 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.  
* 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, 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).
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. These onstructs are not supported (the STRING type is now supported);  
** 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.

Revision as of 13:27, 14 April 2011


As of version 1.3, ProB contains a much improved parser which tries be compliant with Atelier B as much as possible.

Atelier B Plugin

There is also a plugin for Atelier B for use withthe standalone Tcl/Tk Version on Atelier B projects.

Differences with Atelier B

Extra Features of ProB

  • Identifiers: ProB also allows identifiers consisting of a single letter.
  • 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 right-to-left. For example, it is sufficient to type xx<:yy & yy<:NAT instead of typing both xx and yy in ProB.
    • Similar to Rodin, ProB extracts typing information from all predicates. As such, it is sufficient to type xx/:{1,2} instead of xx.
  • 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

  • Parsing: ProB will require parentheses around the comma, the relational composition, and parallel product operators. For example, you cannot write r2=rel;rel. You need to write r2=(rel;rel). 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 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:
    • 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: These onstructs are not supported (the STRING type is now supported);
    • VALUES: This clause of the IMPLEMENTATION machines is not yet supported;