We'll examine some examples of Process Networks (PN), in particular:
We'll then see a review of classes of processes and how they relates to each other, and introduce some new terms.
Consider
a process with two inputs and one output as in the figure. The two input
signals s and s' are (possibly infinite) sequences of values;
we care only about the order of values, and not their tags. The output
signal s'' is one of the many possible ways of interleaving them.
The key things are:
Note that the two subsequences are disjoint, i.e. if a particular value occurs in s and in s', then there should be two appearances in s''.
Question: is this process continuous? No.
Question: is this process a function? No. In fact, given the inputs you cannot determine the output because there are many possible interleaving.
The Least Fixed Point Theorem requires the function to be continuous, so it cannot be applied to the Fair Merge example. Therefore in general we don't know if the feedback composition is determinate or not. Note that continuity => determinacy, but the reverse is not valid; we can have a non continuous function which is determinate. In the case of the Fair Merge, suppose that s is the infinite sequece of 1s, and s' is the empty signal, then the output signal s'' is completely determined because we have only one possible interleaving. But if s'=[0,0,0,...] the system is not determined any more.
We
have again a process with two inputs and one output, but this time we restrict
the set of possible values to {0,1}. The output s'' is computed
with the following rule:
Pair off the two inputs untill you run out of one signal; at this point continue with the remaining values, extending the other signal with | (bottom). Discard all the | in the output signal.
As a truth table we use the OR binary function, augmented with the definition of ORing with | as in the following table:
| | | 0 | 1 | |
| | | | | | | 1 |
| 0 | | | 0 | 1 |
| 1 | 1 | 1 | 1 |
The intuition behind this definition is that if we receive a 1 on an input, we are sure we should output a 1 regardless of the other value, while receiving a 0 and | doesn't give enough information, unless we receive 0 on both inputs. Let's consider the following two examples:
Under the prefix order, Ex.1 is a prefix of Ex.2, since the latter is an extension of the former. However, the output of Ex.1 is not a prefix of the output of Ex.2, therefore the parallel OR is not monotonic. Intuitively, this sysyem violates causality; it is like, when extending the input, we could go back, change our mind and get another output. The parallel OR is a function, because once the input are known, the output is completely defined. The word parallel comes from the fact that we should compute the output in parallel for allinput values, and cannot incrementally obtain it because we would get different results.
Untill now we have divided processes in various classes, based on some properties like monotonicity and continuity. We also prooved that some implication apply, and we gave some examples:
| continuous | Identity, Head Function |
| => monotonic | Finite-Infinite |
| => function | Parallel OR |
| => process | Fair Merge |
Kahn-McQueen interpretation adds blocking reads to this picture, and we are going to identify subclasses of continuous functions with specific characteristics. These are the classes of Vuillemin-Sequential processes and that of stable processes. The following implications hold:
Other subclasses of continuous processes are Kahn-Plotkin Sequential and Linear, but our interest in them is only limited since very few applications of them are known.
1. This problem is solved in synchronous languages by considering the absence of an event as a value, i.e. we don't discard bottoms in the output.
2. It's the process which outputs [0] if the input is finite, [0,1] if it's infinite.