Introduction

The Process library contains classes and algorithms for general processes. The code in the Process library is contained in the namespace process.

The following C++ classes are defined for the Process Library:

Process expressions

Process expressions are defined using the following grammar

\[\begin{split}\begin{array}{lrl} p & ::= & a(e_1, \ldots, e_n) \: \mid \: P(e_1, \ldots, e_n) \: \mid \: P(d_1 = e_1, \ldots, d_n = e_n) \: \mid \: \delta \: \mid \: \tau \: \mid \: \sum\limits_{d_1:D_1, \ldots, d_n:D_n}p \\ & ~ & \: \mid \: \partial _{B}(p) \: \mid \: \tau _{I}(p) \: \mid \: \rho _{R}(p) \: \mid \: \Gamma _{C}(p) \: \mid \: \bigtriangledown _{V}(p) \: \mid \: p\ |\ p \: \mid \: p^{@}t \: \mid \: p\cdot p \\ & ~ & \: \mid \: c\rightarrow p \: \mid \: c\rightarrow p\diamond p \: \mid \: p << p \: \mid \: p\ ||\ p \: \mid \: p\ ||\_\ p \: \mid \: p + p, \end{array}\end{split}\]

where \(a(e_1, \ldots, e_n)\) is an action, \(d_i\) is a variable of sort \(D_i\), \(e_i\) is a data expression, \(B\) and \(I\) are lists of strings, \(R\) is a list of rename expressions, \(C\) is a list of communication expressions, \(V\) is a list of action name multi sets, \(t\) is a data expression of sort Real, and \(c\) is a data expression of sort Bool.

The following C++ classes are defined for process expressions:

process expression classes

Expression

C++ class

\(a(e_1, \ldots, e_n)\)

action

\(P(e_1, \ldots, e_n)\)

process_instance

\(P(d_1 = e_1, \ldots, d_n = e_n)\)

process_instance_assignment

\(\delta\)

delta

\(\tau\)

tau

\(\sum\limits_{d:D}p\)

sum

\(\partial _{B}(p)\)

block

\(\tau _{B}(p)\)

hide

\(\rho _{R}(p)\)

rename

\(\Gamma _{C}(p)\)

comm

\(\bigtriangledown _{V}(p)\)

allow

\(p\ |\ p\)

sync

\(p^{@}t\)

at

\(p\cdot p\)

seq

\(c\rightarrow p\)

if_then

\(c\rightarrow p\diamond p\)

if_then_else

\(p << p\)

bounded_init

\(p\ ||\ p\)

merge

\(p\ ||\_\ p\)

left_merge

\(p + p\)

choice

Algorithms on processes

Selected algorithms on processes

algorithm

description

alphabet_reduce

Applies alphabet reduction to a process specification

eliminate_single_usage_equations

Eliminates equations that are used only once, using substitution

eliminate_trivial_equations

Eliminates trivial equations, that have a process instance as the right hand side

eliminate_trivial_sums

Eliminates trivial equations, that have a sum of process instances as the right hand side

is_guarded

Checks if a process expression is guarded

is_linear

Determines if a process specification is linear

normalize_sorts

Applies sort normalization to a process data type

remove_duplicate_equations

Removes duplicate equations from a process specification, using a bisimulation algorithm

rewrite

Applies a rewriter to a process data type

translate_user_notation

Applies translation of user notation to a process data type

Search and Replace functions

Search and Replace functions

algorithm

description

find_identifiers

Finds all identifiers occurring in a process data type

find_sort_expressions

Finds all sort expressions occurring in a process data type

find_function_symbols

Finds all function symbols occurring in a process data type

find_all_variables

Finds all variables occurring in a process data type

find_free_variables

Finds all free variables occurring in a process data type

replace_sort_expressions

Replaces sort expressions in a process data type

replace_data_expressions

Replaces data expressions in a process data type

replace_variables

Replaces variables in a process data

replace_variables_capture_avoiding

Replaces variables in a process data type, and avoids unwanted capturing

replace_free_variables

Replaces free variables in a process data type

replace_all_variables

Replaces all variables in a process data type, even in declarations