According to the principles of the OPEN/CAESAR architecture, user is obtained by combining three different modules:
The exploration module can be supplied in three different forms. It can be either an archive file (with .a suffix), or a source C program (with .c suffix) or an object code file (with .o suffix).
If user.a is not present in the current directory, exp.open attempts to fetch it in the OPEN/CAESAR binary library $CADP/bin.`arch`.
If user.c is not present in the current directory, exp.open attempts to fetch it in the OPEN/CAESAR source library $CADP/src/open_caesar.
If user.o is not present in the current directory, exp.open attempts to fetch it in the OPEN/CAESAR binary library $CADP/bin.`arch`.
If no suffix (.a, .c, .o) is specified on the command line for the exploration module user, exp.open will make successive attempts to fetch this exploration module: first, as a source C program with .c suffix; then as an archive file with .a suffix; finally as an object code file with .o suffix.
In addition to LOTOS parallel composition and hiding [ISO-89], already implemented in EXP 1.0, EXP 2.0 contains operators taken from E-LOTOS [ISO-01], CCS [Milner-89], CSP [Brookes-Hoare-Roscoe-84], and mCRL [Groote-Ponse-90], as well as parallel composition using synchronisation vectors, and generalized operators for label hiding, renaming, and cutting (also called restriction in CCS or encapsulation in mCRL). EXP2.0 also contains a priority operator that allows to define priorities between transitions.
Since these operators are taken from various languages that are not always compatible (for instance, the hidden event is written "i" in LOTOS and E-LOTOS, "t" in CCS and CSP, "tau" in mCRL), exp.open allows to customize the graph module with respect to a particular language (called the reference language).
The customization operates on the following parameters:
Default values are associated to each of these parameters, depending on the reference language selected. For backward compatibility reasons, there is no reference language selected by default. See Section LANGUAGE PARAMETERS for details.
Beware that the aldebaran and exp2fc2 tools only work with EXP 1.0 descriptions.
The publication [Lang-05] provides an overview of exp.open 2.0 and its input language.
Note that many CADP tools (such as for instance bcg_min , aldebaran , etc.) require the hidden label to be written "i". If it is written differently, e.g., "tau", then one may use the "-hidden i" option and hide "tau" in each communicating automaton, by using the hiding operator of EXP 2.0 (see Section SYNTAX OF EXP 2.0 below).
Note also that the hidden label is usually written "tau" in the FC2 format. During conversion from FC2 communicating automata into BCG, "tau" labels are automatically renamed into "i" by the bcg_io tool. Therefore, since bcg_io is systematically called to translate FC2 components into the BCG format, the hidden label should be set to "i", using "-hidden i", even though some component is in the FC2 format, with "tau" denoting the hidden label.
o The behaviour of CAESAR_INFORMATION_LABEL with FORMAT_LABEL set to 0 or 1 is described in the OPEN/CAESAR documentation.
o If FORMAT_LABEL is equal to 2, then information about the synchronisations involved in the computation of each label is displayed under the form of a synchronisation vector.
o If FORMAT_LABEL is equal to 3, then the displayed synchronisation vector is extended with information about hidings and renamings performed to produce the label.
This is not a default option.
This option assumes that the composition of LTSs stored in filename.exp corresponds to a system of concurrent processes S as follows: The concurrent architecture of filename.exp is the same as the concurrent architecture of S, and each LTS in filename.exp represents either the state space (named concrete LTS in the sequel) or simply the set of labels (named abstract LTS in the sequel) of the corresponding process in S; States and transitions of abstract LTSs are irrelevant.
Consider processes P0, P1, ..., Pm of S, such that, in filename.exp, the LTS corresponding to P0 is abstract and the LTSs corresponding to P1, ..., Pm are concrete. The -interface option allows to synthesize an interface representing the synchronization constraints imposed on P0 by P1, ..., Pm. This interface has the form of an OPEN/CAESAR graph module stored in a file named filename.c and a list of synchronisation labels stored in a file named filename.sync. The graph module can be translated into an explicit LTS using the generator tool. The resulting LTS can then be given, together with filename.sync, to the projector tool so as to restrict the behaviour of P0.
The interface_directives argument has the form "nat:nat_list", where nat is a natural number and nat_list is a list of natural numbers separated by blank characters. Each of these natural numbers is an index corresponding to the rank of occurrence of an LTS in filename.exp (once eventual .exp file names have been substituted by the expression stored in the corresponding .exp files, see Section EXP FILE INCLUSION above). Index 1 represents the leftmost LTS. The left-hand side of ":" is the index of the LTS corresponding to P0. The right-hand side of ":" is the list of indices of the LTSs corresponding to P1, ..., Pm. interface_directives must be parsed as a single argument on the command line and thus must be enclosed in quotes.
If format is "pep", exp.open generates a file named filename.ll_net, containing a Petri net in the low-level PEP file format [Best-Grahlmann-98];
If format is "tina", exp.open generates a file named filename.tpn, containing a Petri net in the ``tpn'' format of the TINA toolbox [Berthomieu-Ribet-Vernadat-04];
If format is "fc2", exp.open generates a file named filename.fc2, containing a network of automata in the FC2 format [Bouali-Ressouche-Roy-deSimone-96].
The bcg_io and fc2link tools are called internally to make the conversion from EXP to FC2. Note however that fc2link is not provided within CADP but belongs to the Fc2Tools distribution, which can be downloaded at http://www-sop.inria.fr/meije/verification.
Moreover, when converting EXP to FC2, the hidden event must be written "i" (see -hidden option above and Section LANGUAGE PARAMETERS below) because this is required by bcg_io and fc2link.
This option does not require an exploration module. This is not a default option.
This option is not available if filename.exp contains a priority operator.
The syntax of EXP 2.0 is presented using a grammar in the Extended Backus-Naur Form (EBNF):
The EXP 2.0 grammar is presented in several parts, corresponding to the different languages supported. We write "B ::= ... | expression" to express that the definition of B is extended with expression. The entry point of the grammar is the non-terminal symbol AXIOM.
The following productions are common to all languages. IDF stands for any sequence of letters, digits, and underscores ("_"), which begins with a letter and does not end with an underscore. LTS stands for files containing an automaton, FILE for other files, G for gates, GL for gate lists, L for labels, and LL for label lists.
Comments of the form
(* <any text on one or several lines> *)and
-- <any text on one line>are allowed in EXP 2.0 behaviours.
LTS ::= "<filename>"
| IDF (* automaton without extension *)
| "<filename>.bcg"
| IDF.bcg (* automaton in BCG format *)
| "<filename>.aut"
| IDF.aut (* automaton in AUT format *)
| "<filename>.seq"
| IDF.seq (* automaton in SEQ format *)
| "<filename>.fc2
| IDF.fc2 (* automaton in FC2 format *)
| "<filename>.exp" (* include file in EXP format *)
FILE ::= "<filename>"
| IDF (* file without extension *)
| "<filename>(.hid|.hide)"
| IDF(.hid|.hide) (* hide file *)
| "<filename>(.ren|.rename)"
| IDF(.ren|.rename) (* rename file *)
| "<filename>.cut"
| IDF.cut (* cut file *)
G ::= IDF (* gate *)
| "<string denoting a gate>"
GL ::= [G (, G)*] (* gate list *)
L ::= G (* label *)
| "<gate with offers>"
| "<regular expression denoting a gate>"
| "<regular expression denoting a gate with offers>"
LL ::= [L (, L)*] (* label list *)
Note that L can be a gate, or a gate followed by experiment offers, or a regular expression denoting a gate possibly followed by experiment offers. (See the definition of regular expressions in the regexp man page.) The gate of a label L is the sub-string starting at the beginning of L and ending at the first character !, ?, (, space, or tabulation, if any, or at the end of L otherwise.
For instance, "G", "G.*", "G !1", "G(1)", "G.* !.*" are labels, among which "G" is a gate, "G.*" is a regular expression denoting a gate or a gate with offers, "G !1" is a gate with offers, and "G.* !.*" is a regular expression denoting a gate with offers (following LOTOS syntax). Note that the syntax of offers is not restricted to LOTOS: "G(1, 2)" also denotes a gate with offers.
Double quotes around a label can be omitted if and only if the label is a gate satisfying the syntax of IDF, but they are mandatory to avoid syntactic ambiguities when a gate has the same name as a reserved EXP keyword (e.g. "cut", "all", etc.) or when a label contains special characters.
Note: all escape character sequences defined in the specification of ANSI C character constants, except octal numbers, hexadecimal numbers, and '\n', are allowed in labels and filenames enclosed in double quotes. These escape character sequences are replaced by a single character accordingly. Every '\' character that does not belong to an ANSI C escape character sequence is kept unchanged. For instance, '\"' and '\\' are replaced respectively by '"' and '\', whereas '\p' and '\(' are kept unchanged.
AXIOM ::= [[lotos] (behaviour | behavior)] B B ::= LTS | hide GL in B | B "||" B | B "|||" B | B "|[" GL "]|" B | (B)
Note that the LOTOS syntax corresponds exactly to EXP 1.0, except the "lotos" keyword, which was absent in EXP 1.0. In EXP 2.0, LOTOS operators are subsumed by E-LOTOS operators, but they are kept for backward compatibility with EXP 1.0.
AXIOM ::= ...
| [[elotos] (behaviour | behavior)] B
B ::= ...
| [gate | total | partial] hide
([all but] LL | using FILE) in B end hide
| [gate | total | single | multiple] rename
(L -> L (, L -> L)* | using FILE) in B
end rename
| [gate | label] par (all | S) in
B ("||" B)+ end par
| [gate | label] par (all | S) in
LL -> B ("||" LL -> B)+ end par
S ::= [L [# N] (, L [# N])*]
N ::= <positive integer>
AXIOM ::= ...
| [[ccs] (behaviour | behavior)] B
B ::= ...
| B "|" B
| B \ L
| B \ "{" LL "}"
| B "[" L / L (, L / L)* "]"
AXIOM ::= ...
| [[csp] (behaviour | behavior)] B
B ::= ...
| B "|||" B
| B "[|" "{" GL "}" "|]" B
| B "[" "{" GL "}" "||" "{" GL "}" "]" B
| B \ L
| B \ "{" LL "}"
| B "[[" L <- L (, L <- L)* "]]"
AXIOM ::= ...
| [[mcrl] (behaviour | behavior)]
[comm C (, C)* end comm] B
C ::= G "|" G "=" G
B ::= ...
| B "||" B
The mCRL operators "hide", "rename", and "encaps" are subsumed by the operators "hide", "rename", and "cut" presented in Sections "E-LOTOS OPERATORS" above and "OTHER OPERATORS" below.
B ::= ...
| [gate | total | partial] cut
([all but] LL | using FILE) in B end cut
| [gate | total | partial] prio
([all but] LL (> [all but] LL)+)+
in B end prio
| [gate | label] par
SV (, SV)* in B ("||" B)* end par
R ::=
SV ::= (L | _) ("*" (L | _))* -> L
EXP 2.0 satisfies the following precedence and associativity rules:
hide G in "f1.bcg" ||| "f2.bcg"is parsed as:
hide G in ("f1.bcg" ||| "f2.bcg")
"f1.bcg" ||| "f2.bcg" |[G]| "f3.bcg"is parsed as:
"f1.bcg" ||| ("f2.bcg" |[G]| "f3.bcg")
"f1.bcg" | "f2.bcg" \ Gis parsed as:
"f1.bcg" | ("f2.bcg" \ G)
The syntax of EXP 2.0 is the union of all EBNF productions presented above, with the following exceptions:
par G in
"f1.bcg" ||| "f2.bcg"
|| "f3.bcg"
end par
whereas the following behaviours are syntactically correct: par G in
("f1.bcg" ||| "f2.bcg")
|| "f3.bcg"
end par
par G in
hide H in "f1.bcg" ||| "f2.bcg" end hide
|| "f3.bcg"
end par
Note in particular that the following two behaviours have different semantics:
par G in
"f1.bcg"
|| "f2.bcg"
|| "f3.bcg"
end par
and
par G in
("f1.bcg" || "f2.bcg")
|| "f3.bcg"
end par
In the latter case, the "||" occurring in the parentheses corresponds to
the LOTOS or mCRL parallel composition operator, whereas all other occurrences
of "||" correspond to the E-LOTOS parallel symbol.
This section describes the semantics of all EXP 2.0 constructs.
LTS may be the name of a file containing an automaton in one of the AUT (extension .aut), BCG (extension .bcg), FC2 (extension .fc2), or SEQ (extension .seq) file formats.
All automaton files must have a known extension. However, the extension may be omitted in the behaviour description if the automaton is in the BCG or in the AUT format. If LTS does not exist in the current directory, exp.open will first attempt to open LTS.bcg. If LTS.bcg does not exist in the current directory, exp.open will then attempt to open LTS.aut.
Use of the BCG format is recommended since exp.open will automatically convert other formats to BCG using the bcg_io tool.
LTS may also be the name of an EXP file (extension .exp) within double quotes. In this case, the contents of this EXP file is simply copied inside the current EXP expression. This allows to split large expressions into a hierarchy of EXP files.
Example: The expression
"a.exp" || "b.bcg"where file "a.exp" contains the expression
hide A in "a.bcg"is equivalent to
hide A in "a.bcg" || "b.bcg"Note that this is parsed as
hide A in ("a.bcg" || "b.bcg")
hence parentheses may be required to avoid lexical scoping issues.
[gate | total | partial] hide [all but] LL in B end hide | [gate | total | partial] hide using FILE in B end hidewill hide the labels found in B using the given hiding rules. These rules can be specified either as a list of labels (first form), or using an external file FILE (second form).
In the first case, exp.open builds a temporary file, filled with the given labels. In the second case, the hide file must be provided by the user. No particular extension is required, but the filename must be written between double quotes if it does not have the form IDF, IDF.hide, or IDF.hid. See the caesar_hide_1 man page for a definition of the hide file format.
The "all but" keywords modify the semantics of the hiding rules: all the labels, except the labels specified in the list of labels, are hidden.
The keywords "total", "partial", and "gate" modify the matching mode, that is the way the hiding rules are interpreted. See the caesar_hide_1 man page. See also Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized. If no matching mode is specified, then the default is "gate", which implements the LOTOS hiding operator extended with regular expressions denoting gates.
For every hiding
with "gate" matching, exp.open checks whether the gates to be hidden have
an appropriate syntax and issues a warning if they appear to contain experiment
offers (which is a common mistake for novice users). For instance,
hide "G !1"will trigger a warning message because of the occurrence of "!1".
Examples:
total hide "G"hides every label equal to "G",
gate hide "G"hides every label whose gate is G, e.g., "G !1", "G !2",
gate hide ".*G.*"hides every label whose gate contains the character G and
partial hide "G"hides every label whose gate or offers contain the character G.
See the caesar_hide_1 man page for more information on matching mode semantics. regexp man page for information about regular expression syntax.
The semantics of LOTOS "hide" is compatible with that of E-LOTOS, i.e.,
hide GL in Bis equivalent to
gate hide GL in B end hide
[gate | total | single | multiple] rename
L -> L (, L -> L)* in B end rename
| [gate | total | single | multiple] rename
using FILE in B end rename
will rename the labels of B using the given renaming rules. These rules
can be specified either as a list of items of the form L -> L (first form),
or using an external file FILE (second form). In the first case exp.open builds a temporary file, filled with the given substitution rules. In the second case exp.open uses the given renaming file. No particular extension is required, but the filename must be written between double quotes if it does not have the form IDF, IDF.rename, or IDF.ren. See the caesar_rename_1 man page for a definition of the hide file format.
See also Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized. The keywords "total", "single", "multiple", and "gate" modify the way the left-hand sides of the renaming rules are interpreted, see the caesar_rename_1 man page. If no matching mode is specified, then the default is "gate".
For
every renaming with "gate" matching, exp.open checks whether the gates to
be renamed have an appropriate syntax and issues a warning if they appear
to contain experiment offers (which is a common mistake for novice users).
For instance,
rename "G !1" -> "G !2"will trigger a warning message because of the occurrence of "!1" in the left-hand side. Note however that
rename "G" -> "G !1"is correct.
Examples:
total rename "G" -> "H"renames to "H" every label equal to "G",
gate rename "G" -> "H"renames to "H" every gate equal to "G", e.g., "G !1" is renamed to "H !1",
gate rename ".*G.*" -> "H"renames to "H" every gate that contains a G character,
single rename "G" -> "H"replaces the first occurrence of "G" by "H" in every label whose gate or offers contain a G character,
multiple rename "G" -> "H"replaces every occurrence of "G" by "H" in every label whose gate or offers contain a G character, and
total rename "\([a-zA-Z0-9]*\) \(!.*\)" -> "\1 !1 \2"inserts "!1" between every gate (sequence of letters and digits) and its offers (prefixed with !).
See the caesar_rename_1 man page for more information on matching mode semantics. See also the regexp man page for more information on regular expressions.
[gate | total | partial] cut [all but] LL in B end cut | [gate | total | partial] cut using FILE in B end cutis a generalization of mCRL encapsulation, on the same principles as the generalized "hide" operator. Instead of being converted into silent transitions as does the "hide" operator, transitions whose label matches the given regular expressions are simply cut off.
Cut files have the following syntax:
AXIOM ::= <blanks> cut <blanks> \n LABELS
| <blanks> cut all but <blanks> \n LABELS
LABELS ::= (<blanks> L <blanks> \n)*
where L is a label, and <blanks> is any sequence of spaces, tabulations,
carriage returns, newlines, vertical tabulation, or form feeds; these
characters are those recognized by the POSIX function isspace(); they are
always skipped and ignored.
[gate | total | partial] prio
([all but] LL (> [all but] LL)+)+
in B end prio
sets priorities between the transitions of B. In each state of B, a transition
may be executed only if all transitions of higher priority are not ready
for execution. Priorities between transitions (or equivalently, between labels) are defined by a set of priority rules X1 > ... Xn, where each Xi has the form [all but] LLi and LL1, ..., LLn are lists of regular expressions denoting gates or labels. The "all but" keywords that may precede some LLi means all gates or labels but those matching LLi.
Such priority rules define a transitive relation ">>" on labels as follows:
L >> L' means that any transition labeled L has priority over any transition labeled L' or, equivalently, any transition labeled L' yields priority to any transition labeled L.
The relation ">>" must be a strict partial order: B must not contain any label L such that L >> L. If ">>" is not a strict partial order, exp.open will issue an error message and exit.
Beware that the rules X > X' and X' > X'' (which are equivalent to X > X' > X'') imply X > X'' if and only if some label of B matches X'. Therefore, to avoid tricky errors, exp.open checks that every individual regular expression L in LL1, ..., LLn matches some label of B. If not, then exp.open will issue a warning.
The optional "gate", "total", and "partial" keywords define the matching mode, in the same way as for the "hide" and "cut" operators. The matching mode by default is "gate".
Examples:
gate prio
"A.*" > B > all but "A.*", B
in
"f.bcg"
end prio
defines an LTS in which every transition whose gate starts with the letter
"A" has priority over every transition whose gate is "B", which themselves
have priority over all other transitions. partial prio
"A" > all but "A"
in
"f.bcg"
end prio
defines an LTS in which every transition whose label contains the letter
"A" has priority over every transition whose label does not contain the
letter "A" (including hidden transitions). total prio
"A" > "B" > "C"
"D" > "E" > "F"
"A" > "D"
"B" > "E"
"C" > "F"
in
"f.bcg"
end prio
defines an LTS in which A has priority over B, C, D, E, and F, B has priority
over C, E, and F, C has priority over F, D has priority over E and F, and
E has priority over F.
Note: Strong bisimulation is a congruence for all exp.open operators, including "prio". However, branching, observational, and safety equivalences are congruences for all exp.open hiding, cutting, renaming, and parallel composition operators, but not for "prio". It should also be noted that tau*.a equivalence is not a congruence for parallel composition.
[gate | label] par (all | S) in B ("||" B)+ end par
| [gate | label] par (all | S) in
LL -> B ("||" LL -> B)+ end par
are extensions of the E-LOTOS generalized parallel operators presented in
[Garavel-Sighireanu-99]. They denote the concurrent execution of behaviours
following synchronisation rules expressed using the construct "all" or
the synchronisation list "S", and the label lists preceding the "->" symbols,
called synchronisation interfaces. The first form is equivalent to the second form in which all synchronisation interfaces are empty.
The semantics of synchronisation rules is as follows:
Transition synchronisation is a generalization of LOTOS rendezvous: the transition resulting from the synchronisation of transitions labelled with L is also labelled with L. Transitions whose label does not match any synchronisation rule perform asynchronously.
Note that behaviours always synchronize on labels whose gate is the termination gate and never synchronize on hidden events. Note also that "rate" is a keyword used for stochastic transitions (see the bcg_min manual page for details about stochastic transitions) and therefore "rate" should not be used as a gate name. Behaviours never synchronize on stochastic transitions.
Before generating the graph module, exp.open checks that generalized parallel operators are well-formed, i.e.:
These checks can be discarded by using the -nocheck option. This is not recommended because syntactic errors lead to unpredictable behaviours.
Example:
gate par G#2 in G4, G2 -> "f1.bcg" || G1, G3 -> "f2.bcg" || G2, G4 -> "f3.bcg" || G3, G1 -> "f4.bcg" end par
represents an automaton such that:
[gate | label] par SV (, SV)* in B ("||" B)* end par
is parallel composition with synchronisation vectors. It denotes the concurrent
execution of behaviours following synchronisation rules, expressed using
vectors of gates (in "gate" mode) or labels (in "label" mode). A synchronisation vector SV has the form "E1 * ... * En -> L" where each Ei (i = 1..n) is either a visible gate without offers (in "gate" mode), a visible label, i.e., visible gate with offers (in "label" mode), or the special symbol "_" (in both modes). Note that gates and labels must not be defined using regular expressions. If it is not specified, the mode by default is "gate". See Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized.
The left-hand side (left of the arrow) of each synchronisation vector must have as many gates (or labels) and "_" symbols as there are behaviours B in parallel. A gate (or label) G as nth component of a vector left-hand side means that the nth behaviour in the parallel composition can perform a transition whose gate is G only if all behaviours can perform simultaneously as specified by the same vector, possibly on different gates, but with same offers (in "gate" mode). "_" means that no transition is required for the corresponding behaviour. The resulting transition is labelled with the right-hand side of the vector (in "label" mode) or with the right-hand side of the vector, followed by the offers, if any (in "gate" mode). The hidden string is forbidden in the left-hand side of a synchronisation vector.
Transitions that do not fit any vector are blocked, except hidden transitions, which always perform asynchronously. In particular, if one wants to let visible transitions perform asynchronously, it is necessary to define vectors whose left-hand side contain only "_" but one visible gate.
Example:
gate par G1 * _ * G3 -> G13, G1 * G2 * _ -> G12, G1 * _ * _ -> G1 H * _ * _ -> H in "f1.bcg" || "f2.bcg" || "f3.bcg" end par
represents the automaton defined as follows:
B "||" B | B "|||" B | B "|[" GL "]|" Bhave the same semantics as, respectively:
gate par all in B "||" B end par gate par in B "||" B end par gate par GL in B "||" B end parNote that in mCRL mode, "||" has a different semantics (see MCRL PARALLEL). Note also that the "|||" operator of CSP has the same semantics as in LOTOS.
B "|" Bis the parallel composition operator of CCS.
Transitions of both behaviours may either perform asynchronously, or may synchronize, resulting in a hidden event.
Synchronisation is possible only if the corresponding transition labels are co-actions, i.e., they have the same gate and offers, but one of the gates is prefixed with the co-action prefix. The co-action prefix by default is "'" but can be modified using the -coaction option. Note that (1) the co-action prefix should not contain !, ?, (, space, and tabulation characters, which are used to delimit a gate from its offer, and (2) there should not be any space or tabulation between the co-action prefix and the gate identifier (see Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized).
For instance, transitions labelled "G" and "'G" may synchronize, as well as transitions labelled "G O" and "'G O". In both cases, the resulting label after synchronisation is the hidden label.
Note that hidden transitions perform asynchronously and that there is no termination label in CCS.
B "|||" B
| B "[|" "{" GL "}" "|]" B
| B "[" "{" GL "}" "||" "{" GL "}" "]" B
denote parallel composition in CSP.
B "||" Bdenotes parallel composition in mCRL.
In "B1 || B2", transitions may either perform asynchronously, or they may synchronize following communication rules, that must be defined in the preamble of the EXP file ("comm" keyword). A communication rule has the form "G1 | G2 = G3", where G1, G2, and G3 are gates. Communication rules are commutative, i.e., there is no difference between "G1 | G2 = G3" and "G2 | G1 = G3". Such a rule means that if an operand (B1 or B2) may perform a transition whose gate is G1 and the other operand may perform a transition whose gate is G2, and both transitions carry the same experiment offers O, then a synchronisation is possible and results in a transition labelled "G3 O". See Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized.
Note that hidden transitions
must perform asynchronously, and that there must be at most one communication
rule for each pair of gates occurring in the left-hand side of the "=" symbol.
For instance, the following is not allowed:
comm G1 | G2 = G3, G2 | G1 = G4 end comm
Note that the reference language must be mCRL in order for the "||" operator to have mCRL semantics instead of LOTOS semantics. If the reference language is different from mCRL, then any "comm" definition is useless and irrelevant.
B \ "{" L (, L)* "}"
| B \ L
denotes the CCS restriction operator, except when the language option is
set to CSP (see Section CSP HIDING below). In the first form, the behaviour
B is restricted with respect to several labels, whereas in the second form
it is restricted with respect to a single label. CCS restriction is similar to cut (in gate matching mode), except that co-action labels are also affected by the restriction whenever the corresponding action label is affected.
For instance, in "B \ G", transitions of B labelled "G", "'G" (where "'" stands for the co-action prefix), "G O" (where O denotes any communication offer), and "'G O" are cut off. See Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized.
Note that labels in the restriction set can be regular expressions denoting gates, but should not have offers and should not start with the co-action prefix.
B \ "{" L (, L)* "}"
| B \ L
denotes the CSP hiding operator when the language option is set to CSP
(otherwise it denotes the CCS restriction operator, see Section CCS RESTRICTION
above). Both forms are equivalent to gate hide L (, L)* in B end hide gate hide L in B end hiderespectively.
B "[" L / L (, L / L)* "]"denotes the CCS relabeling operator. It is similar to the renaming operator (in gate matching mode) except that the co-action prefix is preserved by renaming.
For instance, in "B [G1/G2]", the labels "G2", "'G2" (where "'" stands for the co-action prefix), "G2 O" (where O denotes any communication offer), and "'G2 O" are renamed respectively into "G1", "'G1", "G1 O", and "'G1 O". See Section SYNTAX OF EXP 2.0 above, which explains how the gate of a label is recognized.
Note that labels can be regular expressions denoting gates, but should not have offers and should not start with the co-action prefix.
B "[[" L <- L (, L <- L)* "]]"denotes the CSP relabeling operator.
The behaviour
B [[ G1 <- G2, ..., G2n+1 <- G2n+2 ]]is equivalent to
gate rename G1 -> G2, ..., G2n+1 -> G2n+2 in B
(Note the opposite direction of the arrows.)
Note that, as a consequence, labels can be regular expressions denoting gates, but should not have offers.
There are two means to select a reference language:
If the EXP file header and the command line option specify different reference languages, then a warning is issued. It is not allowed to specify more than one language option on the command line.
The following table summarizes the default parameter
values according to reference languages. Note that these values (in particular
lines labelled none and LOTOS) are compatible with exp.open version 1.0.
+----------+--------+--------+-------------+------+-------+ | language | hidden | termin.| case | sem. | sem. | | | event | gate | sensitivity | of \ | of || | +----------+--------+--------+-------------+------+-------+ | none | "i" | "exit" | sensitive | CCS | LOTOS | +----------+--------+--------+-------------+------+-------+ | LOTOS | "i" | "exit" | insensitive | CCS | LOTOS | +----------+--------+--------+-------------+------+-------+ | E-LOTOS* | "i" | "exit" | sensitive | CCS | LOTOS | +----------+--------+--------+-------------+------+-------+ | CCS | "t" | N/A | insensitive | CCS | LOTOS | +----------+--------+--------+-------------+------+-------+ | CSP | "t" | "delta"| insensitive | CSP | LOTOS | +----------+--------+--------+-------------+------+-------+ | mCRL | "tau" | N/A | sensitive | CCS | mCRL | +----------+--------+--------+-------------+------+-------+where N/A stands for Not Applicable.
* The parameters associated to E-LOTOS are subject to modifications in the future, depending on implementation choices still to be made.
Note that the hidden string (written either "i", "t", "tau", or anything else) should not be followed by communication offers, whereas the termination string may.
Versions 2.*: Frederic Lang and Hubert Garavel.
Additional information is available from the CADP Web page located at http://cadp.inria.fr
Directives for installation are given in file $CADP/INSTALLATION.
Recent changes and improvements to this software are reported and commented in file $CADP/HISTORY.