In the following, E ranges over FSP process expressions, Q ranges over process identifiers, and A, B range over sets of observable actions (i.e. A L and B L).
Process Definition:
Q = E means that lts(Q) =def lts(E).
Process Constants:
lts(END) = <{e}, {τ}, {}, e> where e ∈ES lts(STOP) = <{s}, {τ}, {}, s> lts(ERROR) = Π
Prefix ->:
If lts(E) = < S, A, Δ, q > and E is not ERROR
then lts(a -> E) = < S ∪ {p}, A ∪ {a}, Δ ∪ {(p, a, q)}, p >, where p S. lts(a -> ERROR) = < {p, π}, {a}, {(p, a, π)}, p >, where p ≠ π.
Choice | :
Let 1 ≤ i ≤ n, and lts(Ei) = < Si, Ai, Δi, qi >, then lts(a1 -> E1 | ... | an -> En) = < S ∪ {p}, A ∪ {a1 ...an}, Δ ∪ {(p, a1, q1)...(p, an, qn)}, p >, where . If Ei is ERROR then Ai = {}.
Alphabet Extension + :
If lts(E) =< S, A, Δ, q >, then lts(E + B) =< S, A ∪ B, Δ, q >.
Recursion:
We represent the FSP process defined by the recursive equation X = E as rec(X = E), where X is a variable in E. For example, the process defined by the recursive definition X = (a -> X) is represented as rec(X =(a -> X)).
We use E[X ← rec(X = E)] to denote the FSP expression that is obtained by substituting rec(X = E) for X in E. Then lts(rec(X = E)) is the smallest LTS that satisfies the following rule:
where “~” is strong semantic equivalence defined in section C.6.1. Mutually recursive equations can be reduced to the simple form described above. For local processes, all occurrences of process variables are guarded by an action prefix and consequently, recursive definitions are guaranteed to have a fixed-point solution.
Sequential Composition:
If lts(P) = < Sp, Ap, Δp, qp > is terminating with end state ep ∈ ES and lts(E) = < Se, Ae, Δe, qe > then lts(P; E) = < Sp ∪ Se, Ap ∪ Ae, Δp ∪ Δe, qp > where qe = ep.