(added new page explaining the unit plugin) |
(Fixed syntax for multiple units.) |
||
Line 27: | Line 27: | ||
VARIABLES | VARIABLES | ||
/*@ unit [1,m,1] */ x, | /*@ unit [[1,m,1]] */ x, | ||
/*@ unit [1,m,1] */ y | /*@ unit [[1,m,1]] */ y | ||
Following the "unit" keyword is a specification of the unit consisting of | Following the "unit" keyword is a specification of the unit consisting of a list containing or more lists. Each of the lists has three entries corresponding to different parts of a SI unit. | ||
# The first number represents the exponent to the units base, i.e. a 1 represents 10^1 | # The first number represents the exponent to the units base, i.e. a 1 represents 10^1 | ||
# The second entry is the units symbol, and | # The second entry is the units symbol, and | ||
Line 36: | Line 36: | ||
[1,m,1] for example stands for 10^1 m^1. | [1,m,1] for example stands for 10^1 m^1. | ||
The different sublist are considered as multiplied. Thus [[3,m,1],[0,h,-1]] represents km/h. | |||
For several often used units like cm, dm, km and so on an alias can be used. | For several often used units like cm, dm, km and so on an alias can be used. | ||
VARIABLES | VARIABLES | ||
/*@ unit mm */ x, | /*@ unit [mm] */ x, | ||
/*@ unit dm */ y | /*@ unit [dm] */ y | ||
Once at least one variable is annotated, further units can be inferred. | Once at least one variable is annotated, further units can be inferred. |
This tutorial describes, how ProB's integrated plugin for unit analysis can be used to verify the usage of physical units throughout a B machine. This includes
The plugin is currently a work in progress. Rough edges are to be expected.
We assume that you have a general understanding of B and the usage of ProB.
Currently, the plugin can only be used with classical B machines. Therefore, a B machine needs to be loaded before the plugin can be activated.
Once a machine is loaded, the plugin can be activated through ProB's plugin menu. Choose "Interpreting units stored in pragmas" inside of the activate plugin submenu. Furthermore, the preferences can be accessed through the menu.
At this stage, two preferences are available:
To connect a variable with an expected physical unit, a special comment is placed before the variable.
VARIABLES /*@ unit 1,m,1 */ x, /*@ unit 1,m,1 */ y
Following the "unit" keyword is a specification of the unit consisting of a list containing or more lists. Each of the lists has three entries corresponding to different parts of a SI unit.
[1,m,1] for example stands for 10^1 m^1.
The different sublist are considered as multiplied. Thus [[3,m,1],[0,h,-1]] represents km/h.
For several often used units like cm, dm, km and so on an alias can be used.
VARIABLES /*@ unit [mm] */ x, /*@ unit [dm] */ y
Once at least one variable is annotated, further units can be inferred.
The unit plugin integrates with ProB's animation facilities. Both results and parameters of operations are displayed with their unit. For variables, the unit is stored inside the machines state space. This enables the plugin to be used in conjunction with the evaluation view, the dot output and so an.
If activated, the results of the static analysis can be accessed from the plugin menu. Currently, the results include the inferred unit of every variable inside the active B machine. Furthermore, a warning is displayed, if multiple units were inferred for a single variable (which usually is caused by wrong usage of the variable). Another warning message is shown for variables, for which no unit could be inferred.